现在的位置: 首页 > 综合 > 正文

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

2012年12月20日 ⁄ 综合 ⁄ 共 1017字 ⁄ 字号 评论关闭

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

                                                                 
~                             

抱歉!评论已关闭.