This question already has answers here:
Undefined behavior and sequence points
                                
                                    (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/

10-11 06:23
查看更多