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

#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

regex - Perl - 如何从文本文件中省略行?

user-interface - 在 TreeView Odoo 13 之外添加按钮

rust - 关于位复制的 Copy 特性是否仅从堆栈复制?

regex - 查找以 RegEx 结尾的字符串替换失败?谷歌脚本

reactjs - 将 useState 与具有多个 bool 字段的对象 react

go - Helm : How to convert a string into lower/upp

javascript - 不要将数字或单词替换为下划线,而是保留破折号并删除其周围的空格

haskell - 合并两个 Either Monad 的结果

javascript - Material-UI Select 在 onChange 后不更新