您的位置:首页 > 其它

数组指针和多维数组 挑战你的c功底

2010-03-20 20:01 155 查看
1 #include <stdio.h>

2

3 int main(int argc, char *argv[])

4 {

5 char a[4][3][2] ={{{ 'a', 'b'}, {'c', 'd'}, {'e', 'f'}},

6 {{'g', 'h'}, {'i', 'j'}, {'k', 'l'}},

7 {{'m', 'n'},{'o', 'p'},{'q', 'r'}},

8 {{'s', 't'},{'u', 'v'},{'w', 'x'}}};

9

10 char (*pa)[2] =&a[1][0];

11 char (*ppa)[3][2] = &a[1];

12 这个的问题是通过指针pa 和ppa访问数组a中的'r'元素,表达式该怎么写。

恩 很好好强悍!可以帮助你深刻理解数组指针和多维数组的关系。

13 printf("%c/n%c/n", *(*(pa + 5) + 1), *(*(*(ppa + 1) + 2) + 1));

14

15 return 0;

16 }

我的理解和做法:层层分解,步步为营。

首先看a[1][0] char a[4][3][2]去掉a[1][0]

后是char a[2]而去地址&后则为char * a[2] 正好和左边pa一致的类型,那么pa指向的就是a[1][0]

的地址,它指向的元素是一个一维数组~ 那么找‘r’的话 先 *(pa + 5)指向了{‘q’,''r'}这个一位数组的首地址,然后要找‘r’则*(*(pa + 5)+ 1);

讲到这里不知道大家又没有理解,没理解也不用着急,继续下..........

对于第二个:换种方法

从char a[4][3][2]中去掉a[1],剩下 char a[3][2] 那么从char (*ppa)[3][2]中去掉char a[3][2] 剩下 *ppa 再去点& 剩下 ppa 这说明什么呢?说明 ppa 指向a[1] 的首地址,那么找寻‘r’,先*(ppa + 1)找到'r'所在的三维行,然后*(*(ppa + 1) + 2)找到二维行,最后*(*(*(ppa+1)+2)+1)))找到

‘r’这个元素。

~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: