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

回答編集履歴

1

char 型のポインタ変数について追記

2020/04/22 07:12

投稿

nskydiving
nskydiving

スコア6500

answer CHANGED
@@ -36,5 +36,38 @@
36
36
  ```C
37
37
  char name1 = 'A'; // 1 文字しか入れられない
38
38
  char *name2 = "山田太郎"; // 複数の文字を入れられる
39
+ ```
39
40
 
41
+ 追記(2020/4/22)
42
+ ---
43
+
44
+ char 型のポインタ変数に全角文字列が入れられるのは、「char 型」ではなく「char 型の配列」へのポインタが格納されているからです。
45
+
46
+ ちょっとややこしい C 言語の仕様なのですが、以下のコードを実際に動かしてみれば、少し理解できるのではないかと思います。
47
+
48
+ ```C
49
+ #include <stdio.h>
50
+
51
+ int main(void)
52
+ {
53
+ // name1, name2, name3 は、いずれも文字列「ABC」が格納されています。
54
+
55
+ char name1[] = {'A', 'B', 'C', '\0'};
56
+ printf("name1 : %s\n", name1);
57
+
58
+ char name2[] = "ABC";
59
+ printf("name2 : %s\n", name2);
60
+
61
+ char *name3 = "ABC";
62
+ printf("name3 : %s\n", name3);
63
+
64
+ return 0;
65
+ }
66
+ ```
67
+
68
+ 出力結果
69
+ ```
70
+ name1 : ABC
71
+ name2 : ABC
72
+ name3 : ABC
40
73
  ```