arr[10]已经越界了,arr[9]才是第10个元素
p>&arr[0]要取等号,p>=&arr[0]
已经越界了
这是代码运行结果,只有下标为0的元素不能赋值,其他都能够赋值,我看的调试,可以从下标为9的元素开始赋值
【以下回答由 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
【相关推荐】