[C]scanfが変数アドレスを受信した理由


numという変数をscanfに渡すと、numという変数自体は使用されません.
scanfで別の変数を宣言し、num値を変数に代入し、代入値を使用して変数を出力します.
これはscanf内でnum値を出力に切り替えることに問題が発生する可能性があるためである.
例えば、入力nはn+1を出力する関数add()があると仮定する.
int num = 3;
int result = add(num);
printf("num = %d, result = %d", num, result);
  • add関数が変数値を受け入れる場合の結果:
  • num = 3, result = 4
  • add関数が変数を直接使用した場合の結果:
  • num = 4, result = 4
    プログラムを書く人にとっては、もちろん1しか考えられません.
    add()関数内部でnum値がどのように変化するか分からない.
    したがって,C言語で関数に値を付与する場合,その変数の値しか使用できない.
    ただし、numの値を実際に変更する必要がある場合があります.この場合、変数のアドレスを値に渡すことで処理できます.
    これにより、関数は変数を格納する場所に直接アクセスして、変数の実際の値を変更することができます.
    従ってscanfは変数のアドレス値をパラメータとして受け入れる.