多维数组和指针数组 Linux C编程一站式学习习题答案

char a[4][3][2] = {{{'a', 'b'}, {'c', 'd'}, {'e', 'f'}},
		   {{'g', 'h'}, {'i', 'j'}, {'k', 'l'}},
		   {{'m', 'n'}, {'o', 'p'}, {'q', 'r'}},
		   {{'s', 't'}, {'u', 'v'}, {'w', 'x'}}};

char (*pa)[2] = &a[1][0];
char (*ppa)[3][2] = &a[1];
要想通过 pappa访问数组 a中的 'r'元素,分别应该怎么写?


要理解这个问题,必须搞清楚pa ppa分别表示什么,和数组a到定义,比如a[i], a[i][j],表示什么?

a[i]指向了一个二维数组,a[i][j]指向了一维数组。

如a[0]指向{{'a', 'b'}, {'c', 'd'}, {'e', 'f'}}, a[0][0],指向{'a', 'b'},

根据pa 和ppa 的定义, 就知道pa指向一维数组,ppa指向到是二维数组。

所以可以根据pa 和ppa到移动,指向r所在到数组,即可根据下表获取r。


  1 #include

  2 void main(){
  3     char a[4][3][2] = {{{'a', 'b'}, {'c', 'd'}, {'e', 'f'}},
  4                        {{'g', 'h'}, {'i', 'j'}, {'k', 'l'}},
  5                        {{'m', 'n'}, {'o', 'p'}, {'q', 'r'}},
  6                        {{'s', 't'}, {'u', 'v'}, {'w', 'x'}}};
  7
  8     char (*pa)[2] = &a[1][0];
  9     char (*ppa)[3][2] = &a[1];
 10     printf("langx pa = %c, ppa = %c \n",(*pa)[0],(*ppa)[0][0]);
 11
 12     pa=pa+5;
 13     ppa=ppa+1;
 14     printf("langx pa = %c, ppa = %c \n",(*pa)[1],(*ppa)[2][1]);
 15 }

你可能感兴趣的:(c,c++,学习笔记)