質問: お世話になっております。C言語に関しての質問です。 scanf()関数を使うときに、記述の仕方は int scanf(const char *書式指定文字列, 引数並び) となりますが、引数並びのところに、&を記述せずとも コンパイルは通ります。しかし、実行をするとエラーが 起こるので、初めは例えば引数を変数Aだとすると、 変数Aの中身が示す値をアドレスとして捉えて、そこに 値の入力を行おうとしているのかと思いました。 ですが、手元にある.net 2003で #include void main(void){ int A=12345678; printf("数値を入力\n"); scanf("%d", A); return; } というプログラムをステップ実行すると、エラーメッセージは 「071018.exe の 0x0041302f でハンドルされていない 例外が発生しました : 0xC0000005: 場所 0x00bc614e に 書き込み中にアクセス違反が発生しました。 。」と出て、 何度同じことを繰り返しても、入力値を変えてみても同じ メッセージがでました。 アドレス値0x00bc614eの場所に値を入れようとしている ようですが、一体"&"の付け忘れによって、どんな現象が 起こっているのかが理解できません。 お分かりの方おりましたら、宜しければご教授下さいますよう お願い致します。
回答: 12345678 = 0x00bc614e つまり、Aはポインタであると解釈しているので、その数値が示すアドレスに書き込もうとしているが、管理外のメモリなのでエラーが出ています。