C++ C+中的运算符优先级+;
对于以下函数 不太清楚它到底应该做什么。根据我对运算符优先级的理解,我的猜测是上面的等价于C++ C+中的运算符优先级+;,c++,C++,对于以下函数 不太清楚它到底应该做什么。根据我对运算符优先级的理解,我的猜测是上面的等价于 int搜索(int n){ 如果(arr[n]==n){ 返回n; }否则{ 返回arr[n]=搜索(arr[n]); } } 但是函数返回赋值对我来说真的没有意义吗?还是我的解释完全错了?你对表达式的扩展在我看来是正确的 我认为您缺少的是赋值表达式可以作为值进行计算。返回的值是赋值后左操作数的值 因此arr[n]=search(arr[n])在分配了search(arr[n])的返回值后,有效地返回a
int搜索(int n){
如果(arr[n]==n){
返回n;
}否则{
返回arr[n]=搜索(arr[n]);
}
}
但是函数返回赋值对我来说真的没有意义吗?还是我的解释完全错了?你对表达式的扩展在我看来是正确的 我认为您缺少的是赋值表达式可以作为值进行计算。返回的值是赋值后左操作数的值 因此
arr[n]=search(arr[n])
在分配了search(arr[n])的返回值后,有效地返回arr[n]
涵盖了标准中允许这一点的部分,并回答了类似的问题
在使用该函数测试了一些不同的初始数组和参数之后,我应该警告您,它可能引发StackOverflow异常
例如:arr[2]={1,0}代码>和搜索(1)代码>我的解释不正确。我删除了我的答案。实际上,arr
是通过for(inti=1;我可以在代码的下面看到arr[search(a)]=search(b)
创建的,所以我现在不太确定。。。
int search(int n) {
return arr[n] == n ? n : arr[n] = search(arr[n]);
}