未初始化字符数组的%d说明符

时间:2016-01-27 01:46:33

标签: c arrays

#include <stdio.h>

int main()
{   
    char a[8];    
    printf("%d\n",a) ;    
    return 0;    
}

对于上面的代码,输出是这样的: - 2686744

此输出背后的原因是什么? 我发现输出不依赖于数组的内容,而是依赖于数组的大小。我只想要解释。

2 个答案:

答案 0 :(得分:1)

您正在以整数打印数组的地址。

如果使用-Wall进行编译以启用警告,则编译器应该对此抱怨。

答案 1 :(得分:1)

char a[8];    
printf("%d\n",a);

此代码具有未定义的行为。

数组表达式a隐式转换为char*值,相当于&a[0]。然后将该值传递给printf - 但由于%d格式需要int参数,因此行为未定义。

如果intchar*碰巧具有相同的大小,并且如果它们使用相同的机制作为函数参数传递,那么它可能会打印地址的十进制表示(数组的初始元素。

但不要这样做。如果要打印地址:

printf("%p\n", (void*)a);