在编译下面的代码时出现警告背后可能的原因是什么?

pho*_*nix 0 c

这是一段简单的代码,我编写这些代码来检查返回局部变量的地址是否合法,并且我的假设被编译器证明是正确的,它给出了相同的警告:

warning: function returns address of local variable
Run Code Online (Sandbox Code Playgroud)

但是执行时会打印正确的地址......看起来很奇怪!

#include<stdio.h>
char * returnAddress();
main()
{
    char *ptr;
    ptr = returnAddress();
    printf("%p\n",ptr);
}

char * returnAddress()
{
    int x;
    printf("%p\n",&x);
    return &x;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 5

行为未定义.

当您调用未定义的行为时,允许发生任何事情 - 包括半理性行为.

返回局部变量的地址.它仍然是一个地址; 如果你幸运的话,它甚至可能是一个有效的地址.如果您访问它指向的数据,您得到的是任何人的猜测 - 尽管您最好不知道.如果调用另一个函数,则指向的空间可能会被新数据覆盖.

您应该收到有关int指针和char指针之间转换的警告- 以及有关返回局部变量地址的警告.