又来问问题了,为什么这个代码不能够全部赋值为0

img


又来问问题了,为什么这个代码不能够全部赋值为0
为什么这个代码不能够全部赋值为0

arr[10]已经越界了,arr[9]才是第10个元素
p>&arr[0]要取等号,p>=&arr[0]

已经越界了

这是代码运行结果,只有下标为0的元素不能赋值,其他都能够赋值,我看的调试,可以从下标为9的元素开始赋值

img

【以下回答由 GPT 生成】

这段代码无法将数组全部赋值为0的原因是循环的条件设置错误。具体地说,循环变量 D 的初始值指向数组的末尾,即 &arr[10],然而数组的有效索引是从0到9,因此这个初始值越界了。另外,循环条件 D >= &arr[0] 也是错误的,因为指针 D 是递减的,当它的值等于数组的首地址 &arr[0] 时,循环条件不再满足,循环结束。

为了正确将数组全部赋值为0,只需将循环变量 D 的初始值改为 &arr[9],将循环条件改为 D >= &arr[0],以及将自增操作符 --D 改为 --D。下面是修改后的代码:

int main()
{
    int arr[10] = {11, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    for (int* D = &arr[9]; D >= &arr[0]; --D)
    {
        *D = 0;
    }

    for (int i = 0; i < 10; i++)
    {
        printf("%d\n", arr[i]);
    }

    return 0;
}

运行上述代码,数组中的所有元素都将被赋值为0,并输出如下结果:

0
0
0
0
0
0
0
0
0
0


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^