Mr.*_*Nex 4 c for-loop ternary-operator infinite-loop operator-precedence
我正在研究一个函数来转置一个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
}
}
Run Code Online (Sandbox Code Playgroud)
但是函数永远不会返回.在我的逻辑中没有看到错误我改写了表达式,现在有了以下工作代码:
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
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助解释为什么第一个版本不起作用,但看似相同的第二个版本呢?
Sou*_*osh 10
根据运算符优先级表,<具有更高的优先级?:.您需要()明确使用以强制执行所需的优先级.
更改
for(int i = 0; i < numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1; i++)
Run Code Online (Sandbox Code Playgroud)
至
for(int i = 0; i < ( numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1) ; i++)
Run Code Online (Sandbox Code Playgroud)
注意:请使用第二种方法.在可读性,维护和理解方面要好得多.