怎样返回一个二维数组的头指针

sjly 2002-05-10 11:54:23
怎样返回一个二维数组的头指针?设要返回头指针的二维数组是a[3][2];
如果写"return a","return a[0][0]"都不能通过编译;如果写"return a[0]"
能通过编译,但在主函数中打印源数组出错,应该怎样解决?
#include "iostream.h"
char *qe();

void main(void)
{
char b[3][2];
char *p;
int i,j;
p=qe();
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
b[i][j]=*p;
cout<<p<<endl;
p++;
}
}
}

char *qe()
{
char a[3][2];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{
a[i][j]='a';
cout<<a[i][j]<<endl;
}
return a[0];
}
...全文
292 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangli50 2002-05-10
  • 打赏
  • 举报
回复
你的函数qe里面的数组的存在域紧在这个函数里,直到这个函数的‘}’;所以你就算返回了这个函数的入口地址,里面的数据也是不安全的,可以说这是个错误。(而且返回数组的入口地址应该这样return a;)我想你的目的是想访问a中的数据是吗?这个前提是他们必须存在,可以的话,把a声名为一个全局数组。在qe中在访问,也不用在从qe中去得到它入口地址。直接用就ok.当然这样,存储空间方面的开销会大点!
jyc_nj 2002-05-10
  • 打赏
  • 举报
回复
:)那个a是在栈里的,返回时里面的值都是无用的.
常见的作用域问题.
晨星 2002-05-10
  • 打赏
  • 举报
回复
你的数组是函数的内部变量,函数退出后就释放了。
可以通过把char a[3][2]声明为static来解决这个问题,即:
在函数qe中:
static char a[3][2];
但我觉得这种习惯不好,因为它破坏了局部变量内存空间的动态性,我感到奇怪你为什么要在函数外部访问内部的数据呢?
tinymole 2002-05-10
  • 打赏
  • 举报
回复
看错了,不好意思
tinymole 2002-05-10
  • 打赏
  • 举报
回复
返回值不应该是void吧?
CENTURYPALADIN 2002-05-10
  • 打赏
  • 举报
回复
可以用数组名表示指针

如G[12][11]
就可以用G表示指向二维数组G[][]的头地址
i_doit 2002-05-10
  • 打赏
  • 举报
回复
#include "iostream.h"
char *qe();

void main(void)
{
char b[3][2];
char *p;
int i,j;
p=qe();
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
b[i][j]=*p;
cout<<b[i][j]<<endl;
p++;
}
}
}

char* qe()
{
static char a[3][2];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{
a[i][j]='a';
cout<<a[i][j]<<endl;
}
cout << a[0] << endl;
return (char*) a;
}

以上代码测试通过,修正有二:
1,char a[3][2] ---〉 static char a[3][2];保证返回时a[3][2]未消失。
2,a是char**,进行类型强制转换即可。
Stephen_Ma 2002-05-10
  • 打赏
  • 举报
回复
同意楼上。此问题很典型。
dengcainiao 2002-05-10
  • 打赏
  • 举报
回复
两个问题
1。二维数组是局部的,返回主函数后既被释放。
2。P应定义为一个二维指针
stepping 2002-05-10
  • 打赏
  • 举报
回复
return (char *) a;
sjly 2002-05-10
  • 打赏
  • 举报
回复
但传来首地址后不能正确读出数据

源题是这样的:
在一个类中(try类)把数据存于一个二维数组中,
主程序要得到这个二维数组char a[3][2]中的数据,它调用try1.Getdata()得到数组的头指针,再读出数组数据 (char *Getdata())
不知道为什么不行,如果以上方法不行,用什么方法才能读出类中二维数组中的数据呢?
qhgary 2002-05-10
  • 打赏
  • 举报
回复
你把char *qe() 改为char **qe()
就可以return a了,呵呵
freezingfire 2002-05-10
  • 打赏
  • 举报
回复
数组,不管是几维的,为什么要返回呢?直接传首地址不就行了?
operaphantom 2002-05-10
  • 打赏
  • 举报
回复
int i[2][3];
int *p;
p = &i[0][0];

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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