Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过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/

10-11 23:03
查看更多