即使在函数完成执行后,局部变量值和地址也会保留
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。更有可能表现不好。最好不要尝试其中任何一个。
#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。更有可能表现不好。最好不要尝试其中任何一个。