有个问题,希望大家给与比较科学的解释
int* p = null;
p = funA();
funB(p);int* funA()
{
   ....
  int a[10];
   ....
  return a;
}void funB(int* b)
{
  ....
}我要问的是,函数内部数组开空间是以int a[10]方式,这样把a返回,但是把p传入funB里,p指针指向空间无数据。解决此问题有三种方法:
(1)funB参数定义成int** b
(2)funA中用new方法分配空间
(3)p在外面分配好空间。
后两种方法能够理解,就是第一种指针的指针这种解决方法,原理是什么,请高手给解释解释,谢谢

解决方案 »

  1.   

    funA中要改用new分配空间。使用int a[10]只是局部变量,当funA执行完后,指针指向的地址已经失效。
      

  2.   


    使用**作为funB参数类型怎么就能取到值呢?
      

  3.   

    如你代码那样处理,由于int a[10];这是一个局部变量,当返回函数值时,他所站用的内存空间就被释放了,所以里边没数据,所以a的值无效了,故这样没值
    你的第一种方法调用funB的时候,给的实参是什么?是funB(&p)?
      

  4.   

    汗,LZ应该去看看基础书了。
    int* funA() 

      .... 
      int a[10]; 
      .... 
      return a; 
    } 这根本是个垃圾函数,a这个数组在返回的时候早就被销毁了,变量的生存周期知识您都没搞清楚。用new则可以避免这一个问题,因为你设置了一个全局的变量。funB也很搓,直接搞个*b返回,这算那门子话,与上面的差不多情况。**这个是指向指针的指针,可以返回 指向*b的地址
      

  5.   

    你在funA里面定义了一个局部变量,当这个函数执行完以后,a这个数据就自动被销毁了,如果要返回数组地址,可以在funa里new动态分配,或者给funA传进去一个数组地址