以下代码为什么不打印任何东西..?

时间:2015-04-08 17:41:52

标签: c arrays sizeof

为什么下面的代码没有输出任何内容?

#include<string.h>
#include<stdio.h>
int array[] = {1, 2, 3, 4, 5, 6, 7};
int main()
{
    int i;
    for(i = -1; i <= (sizeof(array)/sizeof(array[0])); i++)
        printf("%d\n", array[i+1]); 
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您没有正确使用数组索引。使用当前代码,您将超越数组绑定,生成undefined behavior。请记住,c中的数组索引是基于0的,这意味着定义为arr[n]的数组将具有从arr[0]arr[n-1]的有效索引。

也就是说,请注意,sizeof运算符会返回size_t,通常为unsigned类型。因此,signedunsigned的比较会产生奇怪的行为。

将您的代码更改为

int size = sizeof(array) / sizeof(array[0]);
for(i = 0; i < size; i++)
printf("%d\n", array[i]);