对于以下功能
int search(int n) { return arr[n] == n ? n : arr[n] = search(arr[n]); }
不太清楚它应该做什么。根据我对运算符优先级的了解,我的猜测是上面的等价于
int search(int n) {
if (arr[n] == n) {
return n;
} else {
return arr[n] = search(arr[n]);
}
}
但是对于函数来说,返回一个赋值对我来说真的没有意义吗?还是我完全将其解释为错误?
您对表达式的扩展在我看来是正确的。
我认为您缺少的是赋值表达式可以作为值求值。返回的值是赋值后左操作数的值。
因此,arr[n] = search(arr[n])
有效的返回是arr[n]
在为其分配了返回值之后search(arr[n])
。
该SO答案涵盖了允许该标准的部分,并回答了类似的问题。
在使用该函数测试了一些不同的初始数组和参数之后,我应该警告您它可能引发StackOverflow异常!
例如:arr[2] = {1,0};
和search(1);
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句