二维数组首地址的返回

jsjliuxing 2011-07-21 08:07:46

char **GetTestName()
{
char name[5][20]={"s1","s2","s3"};

return name; //返回二维数组名
}

调用该函数总数报错:error C2440: '=' : cannot convert from 'char [5][20]' to 'char ** '
问题:1、二维数组名不是相当于二重指针吗???为什么会报上述错误???
2、如果要返回二维数组名,该函数的返回类型应该是怎样的???
3、如果不返回二维数组名,那么怎么返回一个二维数组???
...全文
720 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-07-21
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
机智的呆呆 2011-07-21
  • 打赏
  • 举报
回复

#include <iostream>
#include <list>
using namespace std;
char **GetTestName()

{
static char name[5][20]={"s1","s2","s3"};
return (char **)name; //返回二维数组名
}

int main()
{
char**p=GetTestName();
cout<<(char*)p<<endl;
cout<<(char*)((char*)p+20)<<endl;
cout<<(char*)((char*)p+40)<<endl;
}
机智的呆呆 2011-07-21
  • 打赏
  • 举报
回复

#include <iostream>
#include <list>
using namespace std;
char (*GetTestName())[20]
{
static char name[5][20]={"s1","s2","s3"};
return name; //返回二维数组名
}

int main()
{
char(*p)[20]=GetTestName();
cout<<p[0]<<endl;
cout<<p[1]<<endl;
cout<<p[2]<<endl;
}
CrySleeper 2011-07-21
  • 打赏
  • 举报
回复
char (*GetTestName())[20]
{
static char name[5][20]={"s1","s2","s3"};

return name; //返回二维数组名
}

char *GetTestName2()
{
static char name[5][20]={"s1","s2","s3"};

return name[0]; //[][]实质上是一维数据
}
luciferisnotsatan 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icechenbing 的回复:]

你的程序有问题!

name是局部变量,GetTestname函数调用完之后name的内存回收!
[/Quote]
++
bdmh 2011-07-21
  • 打赏
  • 举报
回复
char name[5][20],可以对应的是 char (*p)[20],另外返回局部数组是不行的,生命周期结束,消失
0153 2011-07-21
  • 打赏
  • 举报
回复
就算给name前加上static关键字也不行,因为char[][]的储存格式决定了其不可能被转换成char**
恨天低 2011-07-21
  • 打赏
  • 举报
回复
你的程序有问题!

name是局部变量,GetTestname函数调用完之后name的内存回收!

qq376472696qq 2011-07-21
  • 打赏
  • 举报
回复
你返回一个函数里的局部变量当然不对了,函数结束这个数组就没了
jsjliuxing 2011-07-21
  • 打赏
  • 举报
回复
问题补充:
调用该函数的方式是这样的:
char** p=NULL;
p=GetTestname();

69,373

社区成员

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

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