これはおそらく非常に初歩的な問題ですが、どこにも答えが見つかりません。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...)