为什么这样的输出

per*_*ain 2 c pointers

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

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

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

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

Oli*_*rth 10

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

[ 实际上,可能发生的是编译器a直接arr放在堆栈下面.所以&a+1最终价值相等&arr. printf然后重新解释该地址作为指针char,然后最终打印HELLO.如果编译器碰巧以不同的方式排列堆栈,那么您会观察到不同的行为.]