Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
输出:
0x7fff2c96dba4
10
0x7fff2c96dba4
10
即使函数完成执行后,如何保留价值?
我在gcc中执行了几次,在在线编译器中得到了相同的结果。
请帮助我理解这一点...谢谢。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
#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中执行了几次,在在线编译器中得到了相同的结果。
请帮助我理解这一点...谢谢。
最佳答案
即使函数完成执行后,如何保留价值?
未定义行为(UB)。它可能看起来像是在“工作”,但C并未指定这样做。fun(&ptr);
运行正常,但printf("%p",ptr);
是UB,因为值ptr
不再有效。许多系统将容忍此UB。
用ptr
取消引用printf("%d\n",*ptr);
的情况更糟。更容易表现不良。最好不要尝试任何一种。
关于c - 即使函数完成执行,局部变量值和地址也将保留。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48172666/