c - 为什么下面的代码不打印任何内容..?

标签 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;
}

最佳答案

您没有正确使用数组索引。使用当前代码,您将超出数组范围,产生 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]); 

关于c - 为什么下面的代码不打印任何内容..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29521648/

相关文章:

c - C 中的随机字符数组

c - 用户在运行时输入的字符串的大小

python - 我可以创建一个 PyObject* (numpy.float32)

c - c中两个矩阵相乘的函数

c - printf 在程序退出时刷新

C中的字符到整数的转换

java - 在一个字符串中获取一组字符串的所有值

java - 是否可以创建一个引用图片的数组

c - 即使两个变量包含相同的字符串,sizeof() 也返回不同的值

c++ - sizeof() 的参数