任何人都可以解释以下程序的输出吗?如果使用a[i] = 0;
我会得到无限循环,使用a[i] = i;
时会出现段错误,使用i
时0 - 9
之间的a[i] = 0;
范围也会变为a[i] = i;
,而它会变为39在给出段错之前使用#include<stdio.h>
#include<stdlib.h>
int mult(int a, int b);
int main()
{
int a[10];
int i = 0;
for(i=0; i < sizeof(a); i++)
{
a[i] = i;
printf("a[i]=%d i=%d\n", a[i], i);
}
return 0;
}
。
{{1}}
答案 0 :(得分:7)
将sizeof
运算符应用于数组类型时,结果是数组中的总字节数,即sizeof(a)
确定a
中的{1}}字节数在这种情况下,不是数组中元素的数量。使用sizeof(a)/sizeof(a[0])
获取数组a
中的元素数
替换
for(i=0;i<sizeof(a);i++)
带
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
此外,无需初始化i
两次。
答案 1 :(得分:5)
您可能想要更改此行:
for(i=0;i<sizeof(a);i++)
到此:
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
注意:
sizeof(a)
在a[]
中提供字节的数量。
sizeof(a)/sizeof(a[0])
提供a[]
中元素的数量。
答案 2 :(得分:3)
sizeof
没有按照您的想法行事。它返回整个数组占用的字节数。
您需要数组的数字长度,而不是字节大小。
尝试这样的事情:
const int array_size = 10;
int a[array_size];
for (int i = 0; i < array_size; i++) {
a[i] = i;
printf("a[%d] = %d\n", i, a[i])
}
答案 3 :(得分:2)
如果您想知道循环的距离,而不将其存储在单独的const中,请使用sizeof(a)/sizeof(a[0])