#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中执行了几次,在在线编译器中它给出了相同的结果。 请帮助我理解这个...提前谢谢。
答案 0 :(得分:0)
该值未被保留方法'fun'*将主变量'ptr'指向的地址设置为fun变量J的地址,基本上复制地址* var =&amp; j,它不意味着它仍然指向'j'
答案 1 :(得分:0)
即使在功能完成执行后,如何保留值?
未定义的行为(UB)。它可能看起来像#34;工作&#34;,但C没有指明这一点。
fun(&ptr);
运行正常,但printf("%p",ptr);
为UB,因为值ptr
不再有效。许多系统都会容忍这个UB。
取消引用ptr
,printf("%d\n",*ptr);
更糟糕的是UB。更可能表现得很糟糕。最好不要尝试其中任何一种。