局部变量地址可以保留在返回指针的函数中

Ang*_*gus 3 c

#include<stdio.h>

int* a(int* b){
 int a = 20;
 printf("\n  \n");
 if(a == 20){
  printf("\n return from if a : 0x%x \n",a);
  return &a;
 }
 else{
  printf("\n returning from else b : 0x%x\n",b);
  return b;
 }
}

int main(){
 int n = 10;
 int *k,*m;
 k = &n;
 m = a(k);
 printf("\n m ; 0x%x m : %d \n",m,*m);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里我返回函数返回指针的局部变量.在函数退出期间,所有变量都将从堆栈内存中移出,但该函数如何仍保留地址"a"的值并打印数据?

o/p:

 return from if a : 0xbfd8cf14

 m ; 0xbfd8cf14 m : 20
Run Code Online (Sandbox Code Playgroud)

地址保留在指针m中,并正确打印该值.我尝试改变不同的不是.

小智 6

这是你的程序调用未定义的行为.可以自由打印任何东西(或崩溃,或做任何想做的事情).

(也许这就是实际发生的事情:"从记忆中移除"并不意味着持有变量的记忆被破坏,着火或被魔术师消失.这只是它被无效.因为它是一个自动变量在一个函数中,很可能发生的事情只是在函数返回时移动了堆栈指针,使变量无效但完好无损.尽管如此,请不要依赖它.)