#include<stdio.h>
int *addressof();
int main()
{
int *p=addressof();
printf("%u",p);
return 0;
}
int *addressof()
{
int x=9;
return &x;
}
输出:
0
变量的地址可以为零吗?可能吗?
最佳答案
您编写的代码具有未定义的行为,因为它返回一个局部变量的地址,该地址将在函数返回时释放。在这种情况下,编译器可以选择优化它并返回 0。
如果您将变量更改为静态变量而不是您返回的地址将有效
int *addressof()
{
static int x=9;
return &x;
}
检查编译器的警告,第二个问题是,指针的大小不一定与 unsigned long
相同, 替换 "%u"
与 "%p"
在printf
.
https://stackoverflow.com/questions/66758800/
相关文章:
django - 如何从 drf-spectacular API 文档中删除 RetrieveUpd
user-interface - 在 TreeView Odoo 13 之外添加按钮
rust - 关于位复制的 Copy 特性是否仅从堆栈复制?
regex - 查找以 RegEx 结尾的字符串替换失败?谷歌脚本
reactjs - 将 useState 与具有多个 bool 字段的对象 react
go - Helm : How to convert a string into lower/upp
javascript - 不要将数字或单词替换为下划线,而是保留破折号并删除其周围的空格