Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1430451
  • 博文数量: 188
  • 博客积分: 1784
  • 博客等级: 上尉
  • 技术积分: 2772
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-05 22:20
个人简介

发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。

文章分类

全部博文(188)

文章存档

2020年(12)

2019年(11)

2018年(4)

2017年(3)

2016年(11)

2015年(22)

2014年(19)

2013年(25)

2012年(32)

2011年(49)

分类: C/C++

2011-04-29 17:26:26

1 #include
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’这个元素。

阅读(1486) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~