teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

typo

2017/01/22 03:19

投稿

Chironian
Chironian

スコア23274

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;はやるべきでない操作です。