鱼C论坛

 找回密码
 立即注册
查看: 2639|回复: 4

求助指针和多维数组

[复制链接]
发表于 2014-4-21 21:39:19 | 显示全部楼层
设数组a的首地址为1000 :
int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}
*(a+0)==>a[0]是第一个一维数组的数组名和首地址
*a==>*(a+0)==>a[0]是第一个一维数组的数组名和首地址

从二维数组的角度来看,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)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 08:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表