为什么下面的代码没有输出任何内容?
#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;
}
答案 0 :(得分:3)
您没有正确使用数组索引。使用当前代码,您将超越数组绑定,生成undefined behavior。请记住,c
中的数组索引是基于0
的,这意味着定义为arr[n]
的数组将具有从arr[0]
到arr[n-1]
的有效索引。
也就是说,请注意,sizeof
运算符会返回size_t
,通常为unsigned
类型。因此,signed
和unsigned
的比较会产生奇怪的行为。
将您的代码更改为
int size = sizeof(array) / sizeof(array[0]);
for(i = 0; i < size; i++)
printf("%d\n", array[i]);