c-为什么函数返回的int*具有正确的值

  • 本文关键字:int 函数 返回 c pointers
  • 更新时间 :
  • 英文 :


我目前正在学习C指针,并试图理解一些行为。请查看以下代码片段

#include <stdio.h>
int *foo() {
int x = 7;
return (int *)x;
}
int main()
{
int *p = foo();
printf("%d", p);
return 0;
}

输出:7

我想知道为什么要打印7?在我的理解中,7存储在堆栈上并且(int *)x返回指向堆栈存储器的指针,当foo返回"0"时;其堆叠部分应被清除";,那么为什么CCD_ 3仍然指向CCD_。发生这种情况是因为存储7的内存尚未被其他数据覆盖,还是因为发生了其他事情,而我完全误解了这种行为?对不起,如果你认为我的问题很傻,我只是在学习C

(int *)x返回的不是指向x的指针,而是转换为指针的x的值。从整数到指针的转换是由实现定义的。然后,您在不取消引用指针的情况下打印指针的值(通过使用错误的格式说明符调用未定义的行为(。

intint*都是4字节长的典型环境中,整数和指针之间的转换只是使用相同的值,因此您的代码可能会输出正确的结果。

我不理解所有关于未定义行为的评论,也不理解Devolus对此的回答,这与这些无关。

指针是一个数字,您将数字7作为指针返回,然后直接从指针在main中使用它。这没有问题,你会在函数中得到你返回的7。

不知道你从哪里得到42,但它不会出现在你的代码中。