これはおそらく非常に初歩的な問題ですが、どこにも答えが見つかりません。C で数週間プログラミングを行った後、この問題に遭遇したのはこれが初めてです。本質的に、次のようなコードを記述した場合:
int size;
scanf("%d", &size);
printf("size is %d", &size);
たとえば、サイズ = 2 と入力すると、プログラムは 133692 または同様の数値の行に沿って何かを出力します。どうしてこれなの?ここで私は何を間違えましたか?
試す
printf("size is %d", size);
&
変数のメモリ位置 (アドレス) を示します。
printf("size is %d", &size);
したがって、上記は にsize
格納されている値ではなく、のメモリ位置 (アドレス) を出力しsize
ます。
あなたがしなければなりません:
printf("size is %d", size);
代わりは。int
これにより、オブジェクトの値が出力されますsize
。
しかし
printf("size is %d", &size);
未定義の動作です。
のアドレスsize
、つまり を出力してい&size
ます。
プレーンを渡すだけsize
です。
--> アドレスを出力するので&
、printf
ステートメント内の を削除します。&size
printf("size is %d", size);
The calling conventions are different in printf, and scanf.
Printf's arguments are typically by value (no &), but scanf has to have pointers. (&)
(You can't put a new value to e.g. 1.0, but you can print it...)