『Cパズルブック』(Alan R.Feuer, 1985)
[Mac M2 Pro 12CPU, macOS Ventura 13.3.1, clang 14.0.3]
問6.2.1-2のコードと出力は以下の通りです。フォーマット指定子は10進数dから16進数xに変更しています。
ポインタのポインタを使うことでデータのアドレスを動的に変更でき、変数を効率的に共有できるようになります。
#include "defs.h"
int a[] = {0, 1, 2, 3, 4};
int *p[] = {a, a+1, a+2, a+3, a+4};
int **pp = p;
int main() {
PRINT2(x, a, *a);
PRINT3(x, p, *p, **p);
PRINT3(x, pp, *pp, **pp);
printf("&pp: %x\n", &pp); //「ポインタのポインタ」アドレス
return 0;
}
value = 4c04000 value = 0
value = 4c04018 value = 4c04000 value = 0
value = 4c04018 value = 4c04000 value = 0
&pp: 4c04040
配列aのアドレス: 4c04000、格納データ: {0,1,2,3,4}
「ポインタ」アドレス: 4c04018、格納データ: 4c04000
「ポインタのポインタ」アドレス: 4c04040、格納データ: 4c04018
「ポインタ」アドレスの格納データ4c04000を動的に変更して変数を効率的に共有する。