-1
int age;
char name[10];

scanf("%d", &age);
scanf("%s", name);

最初のscanf関数では'&'年齢の前にシンボルを使用しますが、2番目の関数 ではchar配列であるscanfため使用しません。'&'なぜそうなのか誰か教えてもらえますか?

4

3 に答える 3

5

配列はすでにアドレスとして渡されているのに対し、整数変数は渡されていないためです(したがって、そのアドレスは&address-of演算子を介して明示的に渡される必要があります)。

于 2012-10-04T06:04:11.143 に答える
4

配列名自体は、メモリ内のその配列の先頭を参照します。この場合:

name == &name[0]
于 2012-10-04T06:39:42.843 に答える
2

ほとんどの状況では、型 "N-element array of T" の式は ("decay") 型 "pointer to T" に変換され、式の値は配列の最初の要素のアドレスになります。

あなたが書くとき

scanf("%s", name);

式のname型は「10 要素配列char」です。上記の規則により、型「へのポインタ」に変換されchar、その値は と同じ&name[0]です。そのscanfため、配列値ではなくポインター値を受け取ります。

この規則の例外は、配列式がsizeof_Alignof、または単項演算子のオペランドである場合、または&宣言で別の配列を初期化するために使用される文字列リテラルである場合です。

name&nameは同じ(配列の最初の要素のアドレスは配列のアドレスと同じ) を返しますが、それらの型は異なることに注意してください。nametypechar *&name持ちますが、 type char(*)[10]、または「の 10 要素配列へのポインター」を持ちcharます。

于 2012-10-04T11:43:14.227 に答える