#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)
变量的地址可以为零吗?是否可以?
您编写的代码具有未定义的行为,因为它返回一个局部变量的地址,该地址将在函数返回时被释放。在这种情况下,编译器可以选择对其进行优化并返回 0。
如果将变量更改为静态变量,则返回的地址将有效
int *addressof()
{
static int x=9;
return &x;
}
Run Code Online (Sandbox Code Playgroud)
检查的警告从您的编译器,第二个问题是,指针的大小不一定是一样的unsigned long,更换"%u"用"%p"的printf。