回答編集履歴

1

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

2020/04/22 07:12

投稿

nskydiving
nskydiving

スコア6500

test CHANGED
@@ -74,6 +74,72 @@
74
74
 
75
75
  char *name2 = "山田太郎"; // 複数の文字を入れられる
76
76
 
77
+ ```
77
78
 
78
79
 
80
+
81
+ 追記(2020/4/22)
82
+
83
+ ---
84
+
85
+
86
+
87
+ char 型のポインタ変数に全角文字列が入れられるのは、「char 型」ではなく「char 型の配列」へのポインタが格納されているからです。
88
+
89
+
90
+
91
+ ちょっとややこしい C 言語の仕様なのですが、以下のコードを実際に動かしてみれば、少し理解できるのではないかと思います。
92
+
93
+
94
+
95
+ ```C
96
+
97
+ #include <stdio.h>
98
+
99
+
100
+
101
+ int main(void)
102
+
103
+ {
104
+
105
+ // name1, name2, name3 は、いずれも文字列「ABC」が格納されています。
106
+
107
+
108
+
109
+ char name1[] = {'A', 'B', 'C', '\0'};
110
+
111
+ printf("name1 : %s\n", name1);
112
+
113
+
114
+
115
+ char name2[] = "ABC";
116
+
117
+ printf("name2 : %s\n", name2);
118
+
119
+
120
+
121
+ char *name3 = "ABC";
122
+
123
+ printf("name3 : %s\n", name3);
124
+
125
+
126
+
127
+ return 0;
128
+
129
+ }
130
+
79
131
  ```
132
+
133
+
134
+
135
+ 出力結果
136
+
137
+ ```
138
+
139
+ name1 : ABC
140
+
141
+ name2 : ABC
142
+
143
+ name3 : ABC
144
+
145
+ ```