可不可以将调用函数的值赋给一个二维数组?

来源:百度知道 编辑:UC知道 时间:2024/05/23 00:36:03
问题如上,
例有一调用函数chen,其return值为一二维数组
则在主函数中可不可以将其值赋给一新定义数组?

若不可以,应该怎么办?
在TC环境下,简单c语言。题目的意思是在主函数中,例有一数组变量b[][],可不可以出现b=chen这种形式的语句,我用的TC2提示是有错的。再说清楚点,chen是一个调用函数,其返回值是一数组。

题中有代码吗?
问题的关键是函数chen返回的数组到底是在哪里分配的。如果是在chen栈中分配的,当然是不可以,这会导致主函数中的数组b引用一个已经被释放(可以这么说)的内存位置。如果chen返回的数组是在堆中分配的,就可以,因为当chen返回时,这个数组不会被销毁!
既然你反复强调是“简单”C语言,我可以理解为没有涉及到堆这个概念,所以答案就应该是:不可以!
如果这个二维数组是被调函数chen中的栈中定义话,不可以,就像下面这样:
int **chen()
{
int a[10][10];
return a;
}
如果是静态的二维数组,是可以的,如下:
int **chen()
{
static a[10][10];
return a;
}

一般的解决方法是,在堆中分配一个数组,如下:
int** chen() //C++
{
int *a=new int*[10];
for(int i=0;i<10;i++)
a[i]=new int[10];
return a;
}
int** chen() //C
{
int *a=malloc( sizeof(int*) *10);
for(int i=0;i<10;i++)
a[i]=malloc(sizeof(int)*10);
return a;
}