【发布时间】:2018-01-09 16:32:38
【问题描述】:
#include<stdio.h>
int main()
{
int var=100;
int *ptr=&var;
fun(&ptr);
printf("%p",ptr);
printf("%d\n",*ptr);
}
int fun(int **var)
{
int j=10;
*var=&j;
printf("%p\n",*var);
printf("%d\n",**var);
}
输出:
0x7fff2c96dba4 10 0x7fff2c96dba4 10
如何在函数完成执行后保留价值? 我在 gcc 中执行了几次,在在线编译器中它给出了相同的结果。 请帮助我理解这一点...提前致谢。
【问题讨论】:
-
返回(以一种或另一种方式)指向具有自动存储持续时间 j 的对象的指针,并在对象超出范围后访问该对象有undefined behaviour:“对象被外部引用其生命周期 (6.2.4)。使用指向生命周期已结束的对象的指针的值 (6.2.4)。所以这是 2 次 UB。
-
您也永远不会从非 void 函数返回值。
-
@ChristianGibbons btw,这 不是 UB,而是非常标准的符合行为
-
@llija Everila 谢谢您的回复.. 但我没有得到它的是即使在函数完成后它也会打印值。它会被存储一段时间还是未定义的行为(UB)
-
这是
c++,但适用相同的概念:底线,未定义的行为未定义,未定义为失败。仅仅因为它这次“有效”并不意味着它总是会。 stackoverflow.com/questions/6441218/…
标签: c function pointers double-pointer