C语言中怎样使用返回指针的函数来表示数组?
int**x(){intarray[2][3]={{1,3,5},{2,4,6}};returnarray;}怎么调用x[1][1]?比如*(*(a+1)+1)表示a[1...
int **x() {
int array[2][3] = {{1,3,5},{2,4,6}};
return array;
}
怎么调用x[1][1]?
比如*(*(a + 1) + 1)表示a[1][1],但x[1][1]呢? 展开
int array[2][3] = {{1,3,5},{2,4,6}};
return array;
}
怎么调用x[1][1]?
比如*(*(a + 1) + 1)表示a[1][1],但x[1][1]呢? 展开
5个回答
展开全部
如下:
int ** px = NULL;
px = x();
px[1][1]即为你所说的x[1][1],肯定不能直接x[1][1]的,因为你已经把 x定义为函数了!
而且,要注意,你在x函数里临时创建的数组空间,会随着函数退出而撤销,因此要使返回的指针px有效,必须把int array[2][3] = {{1,3,5},{2,4,6}};提出来,作为全局空间。否则会出错的。
int ** px = NULL;
px = x();
px[1][1]即为你所说的x[1][1],肯定不能直接x[1][1]的,因为你已经把 x定义为函数了!
而且,要注意,你在x函数里临时创建的数组空间,会随着函数退出而撤销,因此要使返回的指针px有效,必须把int array[2][3] = {{1,3,5},{2,4,6}};提出来,作为全局空间。否则会出错的。
追问
#include
#include
#include
int **array;
int **play();
int main() {
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 5; ++j)
array[i][j] = i + j + i * j - 1;
int **px = NULL;
px = play();
//std::cerr << array[1][1] << std::endl;
std::cerr << px[1][1] << std::endl;
return 0;
}
int **play() {
return array;
}
编译不错但运行错误?
展开全部
返回一个局部变量数组是什么意思?
函数在调用完毕返回后,局部变量的空间已经被回收。
这时候你还要用他?
函数在调用完毕返回后,局部变量的空间已经被回收。
这时候你还要用他?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int **x()是函数,返回类型为int **,所以不能调用x[1][1],而且二维数组是不能直接返回地址的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能访问x数组,因为array是局部变量,在调用完后array的空间会被销毁。如果你要用数组的空间,你可以传入一个数组变量,再把它返回。或者用malloc分配一个空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询