• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語、ポインタについて。)

C言語ポインタの違いとは?

このQ&Aのポイント
  • C言語初心者がポインタについて理解できない問題。
  • 正しいコードと誤ったコードの違いはアドレスの扱い。
  • 誤ったコードではポインタを使わずに値を直接操作しているため、正しく処理されない。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

正の方 addという関数は計算する変数のアドレスを受け取り、 そのアドレスが指しているデータに加算しています。 つまり、呼び出し側にある変数を操作しています。 add実行後、呼び出し側の変数は変化しています。 誤の方 addという関数は計算する変数のコピーされた値を 受け取り、そのデータに加算しています。 コピーされたデータ(当然ですが、呼び出し側変数 とは別のもの)は関数を抜ける時に消滅します。 add実行後、呼び出し側の変数は全く影響を受け ませんので、元のままです。 呼び出し側が、自分の知っている変数を操作して 欲しい場合はポインタを渡して、関数側で処理 してもらうと言うことです。 値を渡して、結果を戻り値で受け取るならば、変数の コピーを渡すことで、関数の内部処理による影響を 受けないようにできます。 大量の文字列領域や、大容量の構造体などでは コピーを渡すと、メモリの負担が大きくなるため、 ポインタを渡すのが普通です。 ようは使い分けの問題です。

noname#222532
質問者

お礼

使い分けの例、とても分かりやすかったです。nda23さんの回答で改めて「ローカル変数」「グローバル変数」のことが理解できました。感謝しています、ありがとうございました。

noname#222532
質問者

補足

opera-manさんとnda23さん、お二方の回答が私の求めるもので、わかりやすくてとてもすっきりしました。ベストアンサーを選ぶのにすごく悩みましたが、使い分けの用例も教えてくださったnda23さんにしたいと思います。お二方本当にありがとうございました。

その他の回答 (2)

  • opera-man
  • ベストアンサー率26% (111/414)
回答No.3

例えば、add関数でローカル変数を定義し、値を代入したとします。 その値は、main関数で参照することはできません。 その変数はあくまで、add関数内で定義されたローカル変数だからです。 誤のadd関数も同様です。 変数を引数で定義しても、あくまでローカル変数です。 通常のローカル変数と、引数のローカル変数の違いは、 main関数で引き渡した値がコピーされるということだけです。 よって、誤のadd関数内でローカル変数x1、x2を いくら変更しても、main関数で参照できないため、 printfでは、scanfで取得した値が表示されることになりますね^^

noname#222532
質問者

お礼

回答がわかりやすくてパソコンの前で頷いていました(笑)。とてもすっきりしました、ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

例えば int x = 10; int y = x; y += 5; としたとき x の値は変化しますか?

noname#222532
質問者

お礼

変わりません、ね…、 私が馬鹿なのかそれ以上読み込めません… 回答有難う御座います、

関連するQ&A