C 语言中二维数组指针详解

本文详细解析了C语言中二维数组与指针结合使用的几种常见表达方式,包括a+i、&a[i]、*(a+i)和a[i]等,解释了它们如何指向同一地址的不同含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,在一维数组中,对于一个数组a[],*a,a,&a,都表示a的首地址,但如果与二维数组混合使用,就显得更为复杂了。例如对于一个二维数组

 a[2][4]={{1,2.3},{4,5,6}}

 a+i,&a[i],*(a+i),a[i],

这四个表达式到底表示什么呢?

-----------------------------------------------------------------------------------------------------------------------------

先告诉答案吧,其实这几个表达式都是指向同一个地址的,也许你会很诧异,也会很疑惑,怎么会是这样呢!!事实证明就是这样的,


下面来一一道来。在二维数组中,

指针指向分为两个方向:行指向和列指向,尽管上面给出的都是指向同一个地址,但是表达式之间表示的含义还是有轻微的区别的:

其中 a+i 和 &a[i]表示指向行的地址,也就是说,这两个表达式指向的地址是针对一行而言的,指向第i行的首地址,并没有精确到某列元素的地址;而*(a+i),a[i]表示指向列的地址,具体的表示就已经精确到第i行0列这个元素的地址了,这个地址正好是第i行的首地址,所以出现了这几个表达式都指向同一地址。同样我们知道二维数组中    *(a+i)+j   表示数组元素中第i行j列的元素地址,即等价于&a[i][j],【同样*(*(a+i)+j)表示的值就是a[i][j]的内容了】。所以很容易的得到 *(a+i)<=>*(a+i)+0 即表示指向第i行0列的元素的地址,而"a[i]"整体就可以看作一个一维数组,那么这个一维数组表示的就是首地址了,综合起来就是第i行0列的元素的地址。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值