回答編集履歴
1
typo
answer
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
pはchar型へのポインタへのポインタです。
|
4
4
|
従ってp[0]は「char型へのポインタ」を指してます。
|
5
|
-
これはC言語の仕様により「char型へのポインタの配列」とも解釈されます。
|
6
|
-
ということは、pが指
|
5
|
+
ということは、pが指せるメモリ領域の構造は下記です。
|
7
6
|
|
8
7
|
```C
|
9
8
|
struct p_array_image
|
@@ -11,18 +10,21 @@
|
|
11
10
|
char* p0;
|
12
11
|
char* p1;
|
13
12
|
char* p2;
|
13
|
+
:
|
14
14
|
};
|
15
15
|
```
|
16
|
-
sizeof(p_array_image)は32ビット・ビルドなら12でしょう。
|
16
|
+
要素数が3の時、sizeof(p_array_image)は32ビット・ビルドなら12でしょう。
|
17
17
|
|
18
18
|
逆に`char buf[3][100]`は下記のような構造です。
|
19
19
|
|
20
|
+
```C
|
20
21
|
struct buff_image
|
21
22
|
{
|
22
23
|
char buff0[100];
|
23
24
|
char buff1[100];
|
24
25
|
char buff2[100];
|
25
26
|
};
|
27
|
+
```
|
26
28
|
sizeof(buff_image)は300ですね。
|
27
29
|
|
28
30
|
このようにpが指す構造とbuffの構造が全く異なるため、p経由でbuffの要素にアクセス出来るはずありません。従って、p=buff;はやるべきでない操作です。
|