关于C语言中“二维数组和数组元素的地址”的为问题。

先给出以下定义:int*p,a[3],[4];则赋值语句p=a;是合法的语句吗?为什么?备注:二维数组名应该理解为一个行指针。二维数组名同样是一个存放地址常量的指针,其值... 先给出以下定义:
int *p,a[3],[4];
则赋值语句 p=a;是合法的语句吗?为什么?
备注:二维数组名应该理解为一个行指针。二维数组名同样是一个存放地址常量的指针,其值为二维数组中第一个元素的地址。
展开
 我来答
LF_JX
2011-08-10
知道答主
回答量:9
采纳率:0%
帮助的人:4.5万
展开全部
呵呵,首先你的二维数组写错了。这个赋值语句是不合法的,因为指针p是指向一个int值的,而a是指向一个int指针的指针,它俩的类型都不同。。所以这个语句是不合法的。。
追问
a[0]   a[0][0] a[0][1] a[0][2] a[0][3]
a[1] a[1][0] a[1][1] a[1][2] a[1][3]
a[2] a[2][0] a[2][1] a[2][2] a[2][3]
则a[0]的地址就是a[0][0]的地址,a[0]是“存在”的且是“指针”且a[0]自己的地址“并不是”a[0][0]的地址,a,a[0]与a[0][0]是占用着3个不同地址的存储单元且a[0]内部装着的是a[0][0]的地址。
a的值与a[0]相同,只是a包含a[0],a[1],a[2]。而a[0]包含a[0][0] ~ a[0][3],这样理解对么?
追答
你说的很复杂。。,a就是a[0]的地址,a[0]就是a[0][0]的地址。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杜茂彦rc
2011-08-10 · TA获得超过1144个赞
知道小有建树答主
回答量:1314
采纳率:100%
帮助的人:1308万
展开全部
数组名可以认为是个指针常量。
int *p,a[3][4];

你不可以 p = a; 因为a是二维数组。
但是你可以 p = (int*)a; 或者 p = a[0];或者 p = *a;
更多追问追答
追问
为什么呢?
1.“你不可以 p = a; 因为a是二维数组。”二维数组怎么了?这是为什么呢?
2.“但是你可以 p = (int*)a;”为什么呢?这个 p = (int*)a;的含义是什么?
3.“ p = *a; ”这里的这个是什么含义?为什么?
追答
a 类型是 int *const  [4], 相当于 int **, 显然你不能吧int ** 直接赋值给int*;

因为a是个地址,指向数组开始地址,p = (int*)a;意义就是把数组开始地址给p
p=*a; 则是把数组第一行地址给p,实际上就是把数组开始地址给p;
指针或者数组的 *a就是等同于a[0]
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
羿烃Hy
2011-08-10 · TA获得超过145个赞
知道答主
回答量:240
采纳率:0%
帮助的人:245万
展开全部
p是一维指针, (int*)a是强制转换,转换二维指针得到一个一维指针给p当然可以。
p=*a,*a是一维指针,所以一维指针给一维指针赋值当然可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xw51qcxy
2011-08-10
知道答主
回答量:7
采纳率:0%
帮助的人:4.2万
展开全部
不可以
追问
为什么呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式