返回变量地址的函数如何返回零?

sin*_*ind 2 c pointers

#include<stdio.h>

int *addressof();

int main()

{               
    int *p=addressof();
    printf("%u",p);
    return 0; 
}            
int *addressof()
{
    int x=9;
    
    return &x;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
Run Code Online (Sandbox Code Playgroud)

变量的地址可以为零吗?是否可以?

Sim*_*son 5

您编写的代码具有未定义的行为,因为它返回一个局部变量的地址,该地址将在函数返回时被释放。在这种情况下,编译器可以选择对其进行优化并返回 0。

如果将变量更改为静态变量,则返回的地址将有效

int *addressof()
{
    static int x=9;
    
    return &x;
}
Run Code Online (Sandbox Code Playgroud)

检查的警告从您的编译器,第二个问题是,指针的大小不一定是一样的unsigned long,更换"%u""%p"printf