求助:关于二维数组作为函数参数

zhufnbo 2004-11-09 09:40:49
写一个函数:
fun(..,char a[5][5])
二维数组作为一个输出参数,
但是现在这个二维数组会很大,到a[100][100],
造成极大的资源浪费。
而且系统performance会受到很大影响。

但不知用什么样的指针?

我用指针数组,char* a[5],
但是在函数体内,a[i][j] = x;
出现core

而用二维数组作为参数,a[i][j] = x;
不会有core。

请高手帮忙,谢谢!











...全文
231 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhufnbo 2004-11-09
  • 打赏
  • 举报
回复

因为我要用这个函数返回一个二维数组,要知道具体每个即[i][j]的值,
我感觉如果char [5][5],肯定要分配5×5的空间的,
如果只是指针的话,那就根本不用考虑空间的问题吧,
我觉得不对,

-------
char (*data)[5]=a;
好像是对二维数组的一行赋值吧?

谢谢你的答案。
我试试后看。
zhangfjj 2004-11-09
  • 打赏
  • 举报
回复
char (*data)[5]=a;这么来赋值呀
除非你不用数组,不然总要给数组分配空间的。
但在函数调用的栈里,肯定不会有char [5][5],而变成了指针的。
建议看看教材中关于数组和指针这节里的内容。
zhufnbo 2004-11-09
  • 打赏
  • 举报
回复
fun(..,char a[5][5])//在编译时变成了一个char (*a)[5],一个行指针,不会把数组整体传过来的。
所以不会有你所说的资源浪费的问题!
--------------------------------------------------------------------
但是在栈中,要开辟char a[5][5] 或a[100][100]的空间的,所以performance会受到很大影响

另我用char (*data)[5],
怎么赋值?
用data[i][j]?
好像不行,
我试试。
谢谢
zxl_llx 2004-11-09
  • 打赏
  • 举报
回复
用**p吧,
其还是要看你什么数据。因地制宜。
yycec 2004-11-09
  • 打赏
  • 举报
回复
数组(不管几维)在内存中都是一片连续的存储空间,数组名(不管几维)正是这片空间的首地址,也就是第一个元素的地址。用法和指针一样,数组名<=>指针。不信你试试。只有各维的长度不准确时,会引起访问异常。
imRainman 2004-11-09
  • 打赏
  • 举报
回复

fun(..,char a[5][5])//在编译时变成了一个char (*a)[5],一个行指针,不会把数组整体传过来的。
所以不会有你所说的资源浪费的问题!

>>楼上正解~~~~~~~~~~~~~!!!!
xuzheng318 2004-11-09
  • 打赏
  • 举报
回复
帮你顶!
双杯献酒 2004-11-09
  • 打赏
  • 举报
回复
void GetData(char data[4][5] )
也可以写成
void GetData(char (*data)[5] )
但不能写成
void GetData(char* data[5] )
zhangfjj 2004-11-09
  • 打赏
  • 举报
回复
楼上的,数组名a可不是char **,是char(*)[10],你的例子会出问题的!
yycec 2004-11-09
  • 打赏
  • 举报
回复
举个例子:
char a[10][10];
...

void fun(char **array, int nLine, int nCol)
{
for (int i = 0; i < nLine; i++)
{
for (int j = 0; j < nCol; j++)
{
a[i][j] = ...;
....
}
}
}


调用:fun(a, 10, 10);
}
双杯献酒 2004-11-09
  • 打赏
  • 举报
回复
// Dev C++ 4.9.8.0
#include <cstdlib>
#include <iostream>
using namespace std;

void GetData(char data[4][5] )
{
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
data[i][j] = 'A'+i*5+j;
}
data[i][4] = '\0';
}
}

int main()
{

char data[4][5]={0};
GetData(data);
for(int i=0;i<4;i++)
{
cout << data[i] << endl;;
}
system("pause");
return 0;
}
/*
运行结果:
ABCD
FGHI
KLMN
PQRS
请按任意键继续 . . .
*/
yycec 2004-11-09
  • 打赏
  • 举报
回复
二维数组即指针的指针,作为参数传递可如下所示:
void fun(BaseType **pArray, int nLine, int nCol)

余下你应该知道怎么做了吧。
zhangfjj 2004-11-09
  • 打赏
  • 举报
回复
fun(..,char a[5][5])//在编译时变成了一个char (*a)[5],一个行指针,不会把数组整体传过来的。
所以不会有你所说的资源浪费的问题!
LoveCreatesBeauty 2004-11-09
  • 打赏
  • 举报
回复
vla

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧