【发布时间】:2015-07-03 16:44:56
【问题描述】:
我正在研究一个转置NxN 矩阵的函数,该矩阵存储在floats 的数组中。我的第一个实现似乎导致函数无限循环,我似乎无法弄清楚为什么。这是原始代码:
for(int i = 0; i < numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1; i++)
{
for(int j = i + 1; j < numColumns; j++)
{
//Swap [i,j]th element with [j,i]th element
}
}
但是函数永远不会返回。未能在我的逻辑中看到错误,我改写了表达式,现在有以下工作代码:
int middleRow = numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1;
for(int i = 0; i < middleRow; i++)
{
for(int j = i + 1; j < numColumns; j++)
{
//Swap [i,j]th element with [j,i]th element
}
}
谁能帮忙解释一下为什么第一个版本不起作用,而看似等效的第二个版本却可以?
【问题讨论】:
-
不要表现得像个绝地武士,使用括号
-
保留这个变量,你的代码看起来会更好,优化器会妥善处理它。
-
我经常没有给优化器足够的信任。谢谢你的建议,我会的。
-
是的,不需要这么复杂的结构。
标签: c for-loop infinite-loop ternary-operator operator-precedence