#include <stdio.h>
int main()
{
int arr[] = {1,5,7,10};
for (int i = 0; i < arr; i++)
{
arr[i] = arr[i+1];
}
for (int i = 0; i < arr; i++)
{
printf("Arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
我试图在第一个循环中使用数组的大小,但这并不能解决问题。 我注意到的是: 我不确定如何正确循环循环。 循环条件i
< arr does not seem correct. Is my array modification (arr[i] = arr[i+1];) valid? Could someone help me understand why this doesn't work and how to fix it? Thanks!
i < arr
sizeof
是您需要的操作员。
sizeof(arr)
,给出整个阵列的组合大小,从而产生16 bytes
sizeof(arr) / sizeof(arr[0)
,给出每个元素的大小,因为sizeof(arr[0])
会导致4 bytes
for
应该像这样:for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
// code
}
i < arr
是毫无意义的,不会编译。您将整数与数组进行比较(已将其“腐烂”为指向第一个元素的指针)。
您无法遍及整个数组的整个尺寸,因为然后在最后的迭代中将访问数组,从界限访问。
Quick Fix:i+1
i < arr
或更优雅的修复程序:通过执行
i < 3
来摄取静态大小阵列的大小。这意味着将字节中的数组的大小划分,并用字节中的一个数组元素的大小进行将其划分。在您的具体示例中,假设sizeof(arr) / sizeof(arr[0])
int
#include <stdio.h>
int main()
{
int arr[] = {1,5,7,10};
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]) - 1; i++)
{
arr[i] = arr[i+1];
}
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]) - 1; i++)
{
printf("Arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
正在比较
for (int i = 0; i < arr; i++)
与数组的内存,而不是数组的大小。
i
在这里是你的朋友。即使这样,您的程序也很容易读取阵列的末尾。当sizeof
i
太大了。