13

タイトルが示すように、なぜ演算子 (&)scanfを取らなければならないのか、いつも疑問に思っています。address of

4

8 に答える 8

31

Cには「値渡し」パラメーターしかないため、値を入れる「変数」を渡すには、そのアドレス(または変数へのポインター)を渡す必要があります。

于 2010-10-08T19:18:49.223 に答える
15

scanf は「演算子(&)のアドレス」を取りません。ポインタを取ります。ほとんどの場合、出力変数へのポインターは、scanf 呼び出しでアドレス演算子を使用して取得されます。

int i;
scanf("%i", &i);
printf("number is: %d\n", i);

しかし、それが唯一の方法ではありません。以下も同様に有効です。

int *iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);

同様に、次のコードでも同じことができます。

int i;
int *iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);
于 2010-10-08T19:57:26.627 に答える
7

読み取った値を配置するにはアドレスが必要だからです。変数をポインターとして宣言する場合、scanfは必要ありません&

于 2010-10-08T19:19:20.990 に答える
3

他の誰もが、sscanf がその出力をどこかに置く必要があることをよく説明していますが、それを返さないのはなぜですか? 多くのものを返す必要があるため、(フォーマットによって駆動される) 複数の変数を入力することができ、入力した変数の数を示す int を返します。

于 2010-10-08T19:29:55.930 に答える
1

値が(どこに?)メモリアドレスに格納されるためです。そのため、scanf() は (&) 演算子を扱います。

于 2010-10-09T09:00:20.277 に答える
1

標準入力デバイス (通常はキーボード) で何かを入力する場合、データはstoredどこかにある必要があります。pointデータをそこに保存できるように、メモリのどこかにある必要があります。メモリの場所には、その場所pointの が必要addressです。&したがって、演算子 withを使用して、変数のアドレスを渡す必要がありますscanf()

于 2010-10-08T19:20:12.680 に答える
0

それはあなたが何かを保存しているからです。関数がどのように機能する必要があるかを考えてみてください。printf では、結果を出力するだけの void 関数と考えることができます。scanf を使用すると、一部のデータを保持したいので、関数を終了した後でも、入力したデータが格納されるポインター (別名アドレス) が必要です。「int」などのデータ型の引数を使用した場合、scanf 関数を終了するとすぐにデータが失われます。つまり、親関数の次のコード行で、scanfed したデータは次のようになります。なくなった。

于 2021-12-01T01:20:22.403 に答える