函数返回数组指针例程

来源:互联网 发布:最优化的讲解视频 编辑:程序博客网 时间:2024/06/05 16:30
因为你的局部变量是存储在栈中的,函数结束返回的时候,栈顶会下移,在x86的表现是ebp和esp被回复成调用前的值,而对调用函数之前在栈中的内存内容并不做修改,这时你从函数中返回的指针指向的内存没有任何变化,所以你直接访问的时候还会得到那个值(这里很可能是prinft使用栈是没有增长到a[1]指向的地址),如果你在函数返回后立即调用另一个函数,那么该指针地址指向的地方可能被改变,这是该位置的值就未定了。
  例如:
  #include
  int * tain()
  {
   int x[2]={1,2};
   //a=x;
   return x;
  }
  
  int * tain1()
  {
   int x[2]={1,3};
   //a=x;
   return x;
  }
  
  main()
  {
   int *a;
   a=tain();
   tain1();
   printf("%d",a[1]);
  }
  
  这是输入的应该不会是2了,应该会是3

原创粉丝点击