多次元配列とポインタ配列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];
を通過するにはpaまたはppaアクセス配列a'r'元素、それぞれどのように書くべきですか?
この問題を理解するには、pa ppaがそれぞれ何を表しているのか、配列aと定義に至るまで、例えばa[i]、a[i][j]、何を表しているのかを明らかにしなければならない.
a[i]は2次元配列を指し、a[i][j]は1次元配列を指す.
a[0]が{'a','b'},{'c','d'},{'e','f'},a[0][0],{'a','b'},
paとppaの定義によれば,paは1次元配列を指し,ppaは2次元配列を指すことが分かった.
したがって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 ",(*pa)[0],(*ppa)[0][0]);
 11
 12     pa=pa+5;
 13     ppa=ppa+1;
 14     printf("langx pa = %c, ppa = %c ",(*pa)[1],(*ppa)[2][1]);
 15 }