C编程与输出混淆

时间:2013-09-16 17:41:13

标签: c arrays

任何人都可以解释以下程序的输出吗?如果使用a[i] = 0;我会得到无限循环,使用a[i] = i;时会出现段错误,使用i0 - 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}}

4 个答案:

答案 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])