在日常做题的过程中,发现了一个关于通过指针访问二维数组的问题
题目如下:
**若有以下语句:
**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,