質問: 下のコードを見る限りchar str [32]のscanfの部分で&が指定されていません。 ``` int* a ; scanf("%d",a); ``` scanfに変数を代入する場合、変数のアドレスを渡すもので、 ポインタ変数の場合、アドレスは変数名の*をとっぱっらたものをを代入するものだったはずですが、これを念頭に置いて真下のコードを見てみると、 char変数名[数字]はポインタ変数?だと思ったのですが、実際 char変数名[数字]はポインタ変数なんでしょうか。 また、 []の中に入っている数字、char str[32];の32は何を意味しますか。 回答お願いします。 ``` //例 構造体へのアクセス #include int main(void) { struct { int i; double d; char c; char str[32]; } kouzoutai; printf("整数を入力してください。:"); scanf("%d", &kouzoutai.i); // 整数入力を kouzoutai.i に格納する。 printf("浮動小数点数を入力してください。:"); scanf("%lf", &kouzoutai.d); // 浮動小数点数入力を kouzoutai.d に格納する。 printf("文字(半角1文字)を入力してください。:"); scanf(" %c", &kouzoutai.c); // 文字入力を kouzoutai.c に格納する。 printf("文字列(半角31文字、全角15文字まで)を入力してください。:"); scanf("%31s", kouzoutai.str); // 文字列入力を kouzoutai.str に格納する。 printf("kouzoutaiのメンバの値は、%d %f %c %sです。\n", kouzoutai.i, kouzoutai.d, kouzoutai.c, kouzoutai.str); } //以下省略 ```
回答: > > char変数名[数字]はポインタ変数なんでしょうか。 > > > 『char変数名[数字]と書いたときに、「変数名」はポインタ変数なんでしょうか。 』 という質問だとして、回答すると、 違います。ポインタ変数ではありません。配列変数名です。「変数名」自体は変数じゃないので、それに代入は出来ません。 後ろに添え字を書かない「変数名」だけを書いた場合は、配列変数の先頭アドレスを表します。 > > char str[32];の32は何を意味しますか。 > > > これが分からないということだと、まだCに入門しかけている途中でしょうか。ポインタの前に学ぶべき事です。 32は配列のサイズを表しています。文字列は、文字の並びの末尾に`'\0'`を付けた物なので、文字列としては(`'\0'`の分を除いた)31文字まで入ります。