ID非公開

2021/10/21 4:50

66回答

c言語のポインタについてどなたか教えてください。

C言語関連169閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

ThanksImg質問者からのお礼コメント

例文まで加えてくださりありがとうございました! 勉強になりました! その他の方も説明ありがとうございました!

お礼日時:10/25 22:13

その他の回答(5件)

0

3つのメリットがあげられます。 【メモリの節約・複製の手間削減による処理効率向上】 情報の受け渡しを複製ではなく共有で行うのに役立つわけです。 処理速度が遅くメモリ量が少ないシステムでのプログラムの記述 では共有での情報の受け渡しをせざるを得ないことが多いわけです。 (標準ライブラリもその影響を強く受けていると言えると思いますので 実情と合わなくともポインタを使わざるを得ないというのもまた事 実です。) 反面これはセキュアではないとも言えますので、最近の メモリが潤沢で処理速度も速い環境でのC++では逆になるべくポインタ を使わず効率的な複製を中心にセキュアにやっていこうという動きも 起こっているようです。 【自己参照構造体】 文法制約上記述できないこの系統の型も内包メンバをポインタに 置き換えることによって実用上問題無い形で記述できます。 ただライブラリが安定的に発達した今日このごろ、そういった トリッキーな型を使わなければならないことは以前に比べて 減ってきているのではないでしょうか? 【NULLの便利性】 というのは実際的なプログラミングでは結構あると思います。 C++の意味での参照には無いポインタの便利さはNULLの存在と も言えるかもしれません。

・自己参照構造体ででも、ポインタはいつでも絶対必須 というわけではありませんが、ポインタを使うと記述が すっきりすることが知られています。 ・それ以外にも記述をすっきりさせる効果がある場合が あります。但し多分に心理的なものなので使えば100% 確実にというわけではありません。それをすることによって 処理効率も向上する場合も低下する場合もあります。

0

ポインタは、殆どC言語しか使用していない機能で、機械語にも無い物ですので、理解が難しいと推測します。ポインタはC言語で必要に成った物で、それ以前のCOBOLやFORTRANには存在しません、必要に成った理由は関数の引数に有ります、C言語の関数の引数はFORTRANとは異なり、呼び出し物の変数を直接変更出来ない仕様としました、つまり、関数で変更出来るのは戻り値の1個のみとした訳です、C言語では命令を増やさないで、標準関数で提供する方法に改めたので、呼び出し元になるべく影響を与えない意味では正解でしたが、ユーザーが作る関数で呼び出し元の変数を2個以上変更出来ないので、変更出来るように、引数にアドレスを使う方法を考え出した訳です、アドレスで渡す関係で、関数内で新たにアドレスを扱える変数のポインタが必要になった訳です。 例 int f(int *p){*p=*p+*p;return *p/2;} void main(){int i=9;int j;j=f(&i);}

0

どの高校級言語にも、ポインタ表記は存在します。 (COBOLでは方言として存在、メーカー毎に表記が異なる) C言語のポインタが難しいのは、ポインタを取り扱う表記方法が簡略化されているからです。これは、そもそもC言語が高速軽量コンパイラとして登場したためです。 もし、どうしても理解出来なくて、時間があるならアセンブラを勉強することをお勧めします。そうすれば、ポインタというのはアドレスを格納する変数に過ぎないことが分かるでしょう。後は、ポインタに対するC言語の奇妙奇天烈な表記方法に慣れるだけです。

0

C言語はポインタがないとまともにコード組むの大変ですよ。 配列って int a[20]; ってかくじゃないですか? それを printf("%d",a[1]); とか使用しますよね? でもこれはシンタックスシュガー(糖衣構文)と呼ばれる簡易コードです。 本来は printf("%d",*(a+1)); のポインタ表現で書くコードです。 つまり配列使用しているとポインタは使っているのです。 関数にデータを引き渡す時とかメリットがあります。 関数には値を引き渡しているのですがそれは元のデータのコピーなわけです。 なので大きくなるとヘッダが増えてメモリなど処理負荷が増加するんです。 今はAIみたいなことやらなきゃPCスペックで力押し出来てしまいますがメモリが少ない時代では死活問題になる内容でした。 それとポインタが何が関係あるのか?ですが ”データを全てコピーなんてことせずにポインタというデータの先頭アドレスの値を渡してあげれば大きなデータコピーせずに済むじゃないか” というのが参照渡しです。

0

Cの学習、ポインタからもうチョッと進むと、 「リスト構造」というデータを処理する時の定石が現れます リストを予習してみれば、ポインタの偉大さ(便利さ/使い勝手)が身にしみて解かるはず