数组名代表数组第一个元素的地址,二维数组三维数组也这样吗?

inta[2]={1,2};intb[1][2]={1,2};int*p1=a;//这里可以int*p2=b;//为什么这里就不行?同样都是数组名,而且数组名代表数组第一... int a[2]={1, 2};
int b[1][2]={1, 2};
int * p1=a;//这里可以
int * p2=b;//为什么这里就不行?同样都是数组名,而且数组名代表数组第一个元素的地址,为什么二维
数组这里就不能赋给指针呢?
展开
 我来答
kaixingui2012
2014-09-13 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6398万
展开全部
同样都是数组名,而且数组名代表数组第一个元素的地址 这话说的有问题啊埋大

数组名代表的是数组的首地址!
但不同的维数的数组情况是不一样的,如二维数组
int b[3][2] ;
b是数组的首地址,也是第一行的地址
b[0]是第一行第一个元素的首地址(也可以说是数组第一个元素的地址)
可是从数值上来说,b和b[0]是相等的。

变量在进行赋值时,需要接收数据的变量与值变量(或常量)是相同类型才可以
回到你的问题中
int a[2]={1, 2}; //一维数组
int b[1][2]={1, 2}; //二维数组
int * p1=a;//弯余竖一维数组毁凳对应一维指针,可以赋值
int * p2=b; //二维数组 对应 ”伪“二维指针,而p2是一维指针,所以赋值时会有编译错误

”伪“二维指针 这样记比较方便,实际上应该是这样的:
int (*p2)[2] = b ; //这样才是准确的 p2是个指针,指向一个有两个int元素的数据块
更多追问追答
追问
需要接收数据的变量与值变量(或常量)是相同类型才可以
变量与值变量(或常量),这句不懂。
int (*p2)[2] = b ; //
我理解这里的意思是:定义一个指针p2,该指针指向一个有2个元素的数组。
但是不明白为什么这样就能将b赋给p2呢?
p2只是定义了一个指向一个数组的指针啊?但是b是二维数组啊。
追答
(1)
int a = 5 ; //a是接收数据的变量 5是常量
int b=a ; //b是接收数据的变量 a是变量
这样的赋值要求等号两边的类型要一致。就是表达这样一个意思。
(2)
b是二维数组名,是数组的首地址,也是第一行的地址 (先理解了这句话)
p2是定义了一个指向一个"数组"的指针 这个”数组“与b二维数组的列数是相同的,即p2指针与二维数组第一行的地址 是一个类型的,所以可以赋值!(结合上面,好好思考一下)
笃侠6A
2014-09-13 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3257万
展开全部
对,不过二维数组被视为元素为一维数组的一维数组,同样地,三维数组被视为元素为二维数组的一维数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式