ライフをハックしたい

プログラミング初心者向けの記事やランニングや就職活動、資格などについても書いています。

C言語のポインタがわからないときに参考にしたいサイト【ポインタをなぜ学習するのか】

最近よく耳にするIOTのおかげでC言語も最注目されてきました。ずいぶん昔に勉強したので再習得したいと思う人も多いでしょう。

f:id:ywataru:20171021160108j:plain
C言語を習得する上で、最初の大きな壁は「ポインタ」です。ポインタの理解なくしてC言語の習得は出来ません。しかし、多くの入門者を払いのける難しさがあることも事実です。下記に3サイトを紹介しますので役立ててみてください。

pg-kura.hatenablog.com こちらで紹介されている順番で理解することがベストな気がします。これでも分からない場合は、C言語の基本的な理解が抜けている可能性が高いです。

1. そもそも "変数は箱"、という例え話がポインタの説明をややこしくしている
変数という概念を、全く別のメタファーである "箱" に喩えて説明するのはよく使われる手法ですが、その喩えはポインタの説明をするときに破綻します。「箱にラベルを貼るのがポインタです」という "喩え話続行戦略" にはそもそも無理があるのです。
2. 「ポインタを教える」ために変数を教える
3. 「変数を教える」ためにメモリ空間をイメージさせる
4. 「メモリ空間をイメージさせる」ためにバイトという単位を教える
5. バイトの解釈によって色んな表現が可能であることを説明する
6. メモリ空間をイメージさせる
7. 変数を教える
8. ポインタを教える
9. ポインタの文法を教える
10. 配列をポインタと絡めて教える
11. NULL を教える


100% Pure NEET「C言語のポインタはメモリを想像できれば理解できる」
https://www.onaneet.org/blog/archives/5338

序盤の説明が非常にわかりやすいです。序盤の見出しのみ引用します。

コンピュータのメモリがどのようになっているか想像する
ポインタは矢印
ポインタはポインタ型という型
指すものが複数あっても矢印は1つで済むことも


苦しんで覚えるC言語
http://9cguide.appspot.com/

上記2サイトで理解できない場合はC言語の基礎的な理解が出来ていない可能性が高いです。15章:ポインタ変数の仕組みを読んでみて、難しいようでしたらこのサイトの前章を見直してみましょう。下手なC言語入門書籍より分かりやすいです。

いかがでしたでしょうか。ポインタのメリットなくしてC言語は使えないと思います。一度挫折した人も、もう一度挑戦してみてはいかがでしょうか。

補足:私がポインタを教えるとき、どう説明しているか

ポインタを理解しても、ポインタの存在理由がわからないと、どこでポインタを使っていいかわからないと思います。私がポインタを教える際は、下記サイト(1つめのサイトと同じサイトです)を参考に「ポインタをなぜ学習するのか」を説明してからポインタの説明を行っています。かなり偏った説明になってしまいますが、ポインタがわからないよりはマシと割り切って教えています。かくいう私もポインタを使いこなせている自信は全くありません。

pg-kura.hatenablog.com

1.  メモリは有限である

メモリ空間は有限のため、メモリを使いすぎると上限に達してしまう

 →ポインタを使うとメモリの使用量を節約できる場合がある

2.  コンピュータの処理時間は有限である

プログラムは計算ステップを踏むほど遅くなる。大きなデータをコピーすると、それだけでプログラムは遅くなる。

→ポインタを使うと、余計なコピーを避けて処理速度が上がる場合がある

3.  開発工数(開発者の時間)は有限である

同じソース断片がプログラムのあちこちに散らばると、修正が必要になったときに、開発に手間がかかってしまう

 →ポインタを使うと、似たようなソース断片はできるだけ一元管理し、無駄な記述を減らせることがある

 特に1番目が大切であると強調します。「デスクトップに重たいファイル置くの嫌だよね。ショートカットを置こうね」ということを理解しているかしていないかで習熟度が大きく違ってきます。

特に、最近の10代はパソコンの使用に慣れていませんので、ショートカットの概念すらわからない人も多数います。ショートカットの概念がわからない人に、いきなり参照型を教えることは不可能に近いでしょう。

 <div class="amp-ad-title">
<center>スポンサーリンク</center>
</div>

<div>
<amp-ad layout="responsive" width="300" height="250" type="adsense"
data-ad-client="ca-pub-7557608550695156" data-ad-slot="1808569331">
<!-- adsense --> </amp-ad>
</div>

あとがき

この記事を読まれている方は、ポインタを理解したい方か、ポインタを理解させたい方が多いかと思います。スマホネイティブ世代はショートカットの概念が全く無い可能性がありますので、その理解がまず先決です。また、ファイルやフォルダの概念が0の状態でプログラミングを学んでいる場合もありますので、根本的なコンピュータ理解はプログラミング学習の前に必要不可欠かと思います。

 

概念を理解したら、下の記事でポインタの入門を紹介しています。参考にしてみてください。 

www.lifehackit.work