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

#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


以上是返回变量地址的函数如何返回零?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>