c语言的二维数组的指针访问,用指针访问二维数组

本文探讨了如何通过指针正确访问C语言中的二维数组。通过一道题目,解释了指针访问二维数组时的原理,包括数组名在内存中的表示以及指针加法的含义。正确答案解析指出,D项 `(p+2)` 表示的是二维数组的第3行首地址,进而得出 `*(*(p + 2)) == a[2][0];` 的结论。
摘要由CSDN通过智能技术生成

在日常做题的过程中,发现了一个关于通过指针访问二维数组的问题

题目如下:

**若有以下语句:

**int a[4][5],(*p)[5];

p=a;

`下面哪个选项表示a数组中的元素?

`A.  p+1

B. * (p+3)

C. * (p+1)+3

D. ( p+2)`

正确答案为D,我选择了B项。

以下是我的想法 (注意!!这只是我自己错误的思路!!!)

由题干可得:

开了一个4行5列名为a的二维数组,同时声明了一个大小为5的数组指针。

此时p中存着数组a的首地址,即指针p指向a[0][0],即(*p)== a[0][0] 。

因此B项中,*(p + 3) 等价于 a[0][3] (此处我的思路开始出错,原因是没有理解指针表示二维数组时的原理)

所以我认为B项为正确答案;

正确思路:

由题干可得:

开了一个4行5列名为a的二维数组,同时声明了一个大小为5的数组指针。

此时p中存着数组a的首地址,即指针p指向a[0][0],即(*p)== a[0][0] 。

此时,首先来了解一下指针表示二维数组时的原理:

假如有一个二维数组:

int a[3][4] = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值