即使在函数完成执行后,本地变量值和地址也会保留

时间:2018-01-09 16:32:38

标签: c function pointers double-pointer

#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中执行了几次,在在线编译器中它给出了相同的结果。 请帮助我理解这个...提前谢谢。

2 个答案:

答案 0 :(得分:0)

该值未被保留方法'fun'*将主变量'ptr'指向的地址设置为fun变量J的地址,基本上复制地址* var =&amp; j,它不意味着它仍然指向'j'

答案 1 :(得分:0)

  

即使在功能完成执行后,如何保留值?

未定义的行为(UB)。它可能看起来像#34;工作&#34;,但C没有指明这一点。

fun(&ptr);运行正常,但printf("%p",ptr);为UB,因为值ptr不再有效。许多系统都会容忍这个UB。

取消引用ptrprintf("%d\n",*ptr);更糟糕的是UB。更可能表现得很糟糕。最好不要尝试其中任何一种。