#include <stdio.h>
int main()
{
char a[8];
printf("%d\n",a) ;
return 0;
}
对于上面的代码,输出是这样的: - 2686744
此输出背后的原因是什么? 我发现输出不依赖于数组的内容,而是依赖于数组的大小。我只想要解释。
答案 0 :(得分:1)
您正在以整数打印数组的地址。
如果使用-Wall
进行编译以启用警告,则编译器应该对此抱怨。
答案 1 :(得分:1)
char a[8];
printf("%d\n",a);
此代码具有未定义的行为。
数组表达式a
隐式转换为char*
值,相当于&a[0]
。然后将该值传递给printf
- 但由于%d
格式需要int
参数,因此行为未定义。
如果int
和char*
碰巧具有相同的大小,并且如果它们使用相同的机制作为函数参数传递,那么它可能会打印地址的十进制表示(数组的初始元素。
但不要这样做。如果要打印地址:
printf("%p\n", (void*)a);