为什么这样的输出

时间:2012-01-19 15:41:59

标签: c pointers

我在编译代码块后执行了这段代码: -

#include <stdio.h>
int main()
{
    char arr[]="HELLO";   
    int a=arr;    
    return printf("...%s ,%s\n",arr,&a+1);
}

我得到了这个输出: - ... HELLO,HELLO

当我将&a更改为a时,printf返回-1。 我无法理清这个地址逻辑,请帮忙。 (一位朋友给了我这个代码,并问了解释,但我找不到它)。所以我想知道为什么.. 感谢

1 个答案:

答案 0 :(得分:10)

您告诉printf期待一个字符串,但是您给它的地址是int&a)。这会调用未定义的行为,因此任何事情都可能发生。

[实际上,可能发生的事情是编译器将a直接放在堆栈上的arr下面。因此&a+1的结果与&arr相等。 printf然后将该地址重新解释为指向char的指针,最终打印HELLO。如果编译器碰巧以不同方式排列堆栈,您会发现不同的行为。]