二维数组指针的问题?

己知二维数组a[3][4]a,a[0],*(a+0),*a,&a[0][0]是相等的a,a[0],&a[0][0]相等我都理解但*(a+0),*a又分别代表什么意思..这... 己知二维数组a[3][4] a,a[0],*(a+0),*a,&a[0][0]是相等的
a,a[0],&a[0][0]相等我都理解
但*(a+0),*a又分别代表什么意思..这个应该如何理解.....
*不是取内容的运算符吗...加了*之后不就不再是地址了吗....
展开
 我来答
wuhouzheng
2009-05-05 · TA获得超过8561个赞
知道小有建树答主
回答量:1010
采纳率:100%
帮助的人:1298万
展开全部
*(a+0)==>a[0]是第一个一维数组的数组名和首地址
*a==>*(a+0)==>a[0]是第一个一维数组的数组名和首地址

int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}
设数组a的首地址为1000。

从二维数组的角度来看,a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址a+1代表第一行的首地址。

a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址,也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。
同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。&a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。
由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。
此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。
另外,a[0]也可以看成是a[0]+0,是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。

由a[i]=*(a+i)得a[i]+j=*(a+i)+j。由于*(a+i)+j是二维数组a的i行j列元素的首地址,所以,该元素的值等于*(*(a+i)+j)。
百灵鸟137
2009-05-05 · TA获得超过1210个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:309万
展开全部
首先说明:*(a+0),*a,a[0],&a[0][0]0行0列的元素的地址
a是二维数组名,指向一维数组a[0],即0行的首地址,它与上述四个表示形式值相同,但是意义不同。
然后再说一下二维数组指针的问题:
1.二维数组名a,指向的是一维数组,一维数组指向的是元素值。
所以,移动a,如a+1是指向一维数组a[1],而不是指向0行1列的元素!
2.*运算符在这里可以理解为:向下走一级.
*(a+1),是把a+1向下走一级,即指向元素,而不是指向一维数组,即1行0列的元素,此时它=a[1]。*(a+1)+1,是在元素上移一位,即指向a[1][1]元素。
3.类似的,针对你这道题,*(a+0)就是先在以为数组上移动0个单位,再将之降一级定位到一维数组的元素中,*a则是直接降级到一维元素中。
我自已写的都觉得有点绕~~建议你还是耐心把书多读几遍吧,谁写的都没书上写的详细,这部分本来就绕,慢慢理解了~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daimm_know
2009-05-05 · TA获得超过891个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:254万
展开全部

不管是一维数组还是二维数组或更多维,标识符 a 总是指向数组的首地址,也就是说,它是一个指针。

回答如下所示。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老虎博文
2009-05-05 · TA获得超过128个赞
知道答主
回答量:70
采纳率:100%
帮助的人:37.8万
展开全部
对与某个而未数组 int a[M][N]; 单个的a 代表本数组的第一个元素的地址,或者说是数组基地址;那么a 的类型入楼下所说,是(int *)[N],你可以理解为一个特殊的一维数组,或者行数组,这个特殊数组的每个元素又是一个一维数组,那么“a+0”是一个二维指针,我们要求的数组的首地址,所以其前面就得加*,使其的意义变为一个指向一维数组的指针;*a就和*(a+0)等价了。
不知你明白没?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忘至白葬不情必0T
2009-05-05 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
但它现在是二维数组啊,int a[3][4]时,a的类型并不是int*,而是 (int *)[4],所以*(a+0),*a,还是a[0]这个数组的首地址.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式