多次元配列とポインタ配列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 }