#include <stdio.h>
int main()
{
char a[8];
printf("%d\n",a) ;
return 0;
}
对于上面的代码,输出是这样的:- 2686744
此输出背后的原因是什么? 我发现输出不依赖于数组的内容,而是依赖于数组的大小。我只是想要解释。
最佳答案
char a[8];
printf("%d\n",a);
这段代码有未定义的行为。
数组表达式a
被隐式转换为char*
值,相当于&a[0]
。然后将该值传递给 printf
——但由于 %d
格式需要一个 int
参数,因此行为未定义。
如果 int
和 char*
恰好具有相同的大小,并且如果它们使用相同的机制作为函数参数传递,那么它可能会打印一个小数数组(的初始元素)地址的表示。
但是不要那样做。如果要打印地址:
printf("%p\n", (void*)a);
关于c - 未初始化字符数组的 %d 说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027411/