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

Local variable values and Address getting retained even after function completes Execution

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

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

How is value getting retained even after function completing execution?

未定义的行为 (UB)。它可能看起来 "work",但 C.

并未指定如此

fun(&ptr); 运行良好,但 printf("%p",ptr); 是 UB,因为值 ptr 不再有效。许多系统将容忍此 UB。

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