This question already has answers here:
Undefined behavior and sequence points
(5个答案)
4年前关闭。
我有两段代码来获取arr元素的总和:
1。
2。
第一个给了我正确的答案,但是第二个给了我一些垃圾。
所不同的只是,第二个是我传递--size,而第一个是我传递size-1。
我没有弄清楚它们之间有什么区别,即使我通过了像大小一样的后递减,它也会崩溃。
因此,请有人帮助我理解问题,我可以理解,如果事后递减,它将始终传递相同的值(数组的原始大小),因此它进入了循环。
但是减量运算中的问题是什么,我调试了代码但无法弄清楚,因为在这两种情况下,递归调用的循环计数都相同,并且在所有情况下所有调用的大小值都相同。
(5个答案)
4年前关闭。
我有两段代码来获取arr元素的总和:
1。
int sum1(int arr[], int size)
{
if(size<0)
{
return 0;
}
else
{
return arr[size] + sum(arr, size-1);
}
}
2。
int sum2(int arr[], int size)
{
if(size<0)
{
return 0;
}
else
{
return arr[size] + sum(arr, --size);
}
}
第一个给了我正确的答案,但是第二个给了我一些垃圾。
所不同的只是,第二个是我传递--size,而第一个是我传递size-1。
我没有弄清楚它们之间有什么区别,即使我通过了像大小一样的后递减,它也会崩溃。
因此,请有人帮助我理解问题,我可以理解,如果事后递减,它将始终传递相同的值(数组的原始大小),因此它进入了循环。
但是减量运算中的问题是什么,我调试了代码但无法弄清楚,因为在这两种情况下,递归调用的循环计数都相同,并且在所有情况下所有调用的大小值都相同。
最佳答案
return arr[size] + sum(arr, --size);
是UB,因为在arr[size]
和--size
之间没有序列点。
关于c++ - 递归调用以获取带有prefixe或postfix参数的arr元素的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32422849/