回答編集履歴
1
ソースコード、配列の添字をマクロでなく数字に変更
test
CHANGED
@@ -6,11 +6,11 @@
|
|
6
6
|
|
7
7
|
```C
|
8
8
|
|
9
|
-
int score[
|
9
|
+
int score[3][2];
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
for (int i = 0; i <
|
13
|
+
for (int i = 0; i < 3; i++) {
|
14
14
|
|
15
15
|
printf(" (score + %d) = %p\n", i, (score + i)); // (A)
|
16
16
|
|
@@ -62,9 +62,7 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
-
(score + i) は score[i][0] のアドレスです。でも文法上 (score + i) は、まだ score[i][0] をポイントしていない、**score[i][0] と score[i][1] をまとめたモノ**をポイントしている、そのようにコンパイラは扱っている、そう解釈すれば事情が見えてきます。
|
66
|
-
|
67
|
-
即ち、「*」をつけて「*(score + i)」とアクセスし、ポインタを使って取りだした中身は**要素数2の配列**なのです。
|
65
|
+
(score + i) は score[i][0] のアドレスです。でも文法上 (score + i) は、まだ score[i][0] をポイントしていない、**score[i][0] と score[i][1] をまとめたモノ**をポイントしている、そのようにコンパイラは扱っている、即ち「*」をつけて「*(score + i)」とアクセスし、ポインタを使って取りだした中身は**要素数2の配列**なのです。そう解釈すれば事情が見えてきます。
|
68
66
|
|
69
67
|
|
70
68
|
|