C言語で「 ポインタ」を教える場合、もっともわ

Writer: admin Type: このテヒョンのiPhone Date: 2018-12-15 00:00
C言語で「 ポインタ」を教える場合、もっともわかりやすい方法はありますか?補足はじめての初心者の生徒に教えてるC言語の担当の先生はこの分野、この項目をどうやって教えてるのかねえ?教科書に書いてあることをそのまま説明しても聞いてるほうは意味不明で誰も理解できません。先生一人一人の創意工夫とわかりやすい説明力が問われる・・・。共感した0###まず、CPUとメモリとデータ(とプログラム)の関係から入るのが、基本だけど一番わかりやすいと思う。そこをイメージできずにいくらポインタの機能ばかり説明しても、分かりにくいだけじゃないかと。ナイス0
###よく先生はたくさん問題を解いて感覚で覚えろ!というけどそんなのダメ!山の中を目隠しでマラソンするようなもの。やはりハードの知識が必要なんだ。海外のチンピラハッカーもそれを勉強して攻撃してるはずなんだ。ハードウエアの中のメモリとアドレスの役割が視覚的に位置的にわかるようにそれらを題材にした3Dゲーム、カードゲームが必要だ!誰か暇なときに、そういうのを作ってくれ!###もっとも分かりやすい方法はポインタがなぜ必要かを説明する事です。必要な理由は一つ目は関数の引数は値を渡す仕様としたためで、値渡しをしたものは元の値を変更出来ないので、関数で変更した物は、呼び出し元には戻り値の1つしか戻せないのが理由で、2個以上戻したい場合は、参照渡しでアドレスを渡す事になり、関数内ではポインタを使わないと対応出来ない為です。2つ目は、文字列の持ち方で、文字列はあるアドレスから、最初に0x00が見つかった所までを文字列と決めたので、ポインターを使わないと文字列を扱えません。最近のプログラミング言語では初心者にはポインターが理解できない人が多いので、使わなくても良いように改良されていますが、ポインタ以外の難しい物がてんこ盛りのようです。ナイス0
###ちょっと遠回りにはなりますが、基本情報技術者試験のCASLⅡを学習するのは如何でしょうか。ナイス0
###コンピューターのメモリーにおけるアドレスの概念を理解させないとね、まず!C言語に限らず、基本概念なんでね。その上で、変数の型、バイト幅とか変数の構造をメモリー上で理解して初めてアドレスの概念と型を併せたポインターの概念の理解に至るかな。分かり易いなんて習う側にとっては、無いでしょ、多分!この世界、センスって大事なんでね。分からない人って居るんでね、必ず、残念ながら...ナイス0
###ポインタはあくまでもポインタ変数という変数。ポインタ変数にはメモリアドレスが保管される。また宣言時には「この型用のものですよ」ということも示しておく。宣言時に何段階まで参照するのかを*の数で指定int **data;またこのとき、変数名自体はdataである。そして、dataにはアドレス数値が収まっているのだけれど本文中でアドレス値の前に*を付けるとその数値をアドレスとして、該当アドレスの中身を読みに行く。int *data;int n=10;data=&n;これでdataにはnの「場所(アドレス)」が記録されたからa=(*data);とでもして呼び出せばnの値10が出てくる。さらにint **p;p=&data;とすれば、変数dataの「場所」を記録できる。これがポインタのポインタ。**p==*(*p)==*data==nナイス0
###まずはデータとその場所(アドレス)の違いについて理解させることが必要でしょう。たとえば、int apple = りんご;とあれば、&apple はりんごがある場所を指します。たとえば、&apple == 机の上 のようになります。ここで、他の人にりんごの場所を教えたいときに、りんごの場所を書くためのメモ用紙が必要になります。これがポインタです。たとえば、int *memo = &apple;とすれば、メモ用紙にりんごの場所、つまり「机の上」とメモ用紙に書き込まれます。そして他の人がりんごを探すときメモ用紙に書き込まれた場所を参照して探します。メモ用紙に書かれた場所を探すときは *memo とすれば探せます。つまり、*memo == りんご となります。さらにそのメモの場所を他の人に伝えないならポインタのポインタの出番です。int **memo2 = &memo;とすると memo2 に memo の場所が書き込まれます。たとえば、&memo == 冷蔵庫の扉 とあれば、memo2 には「冷蔵庫の扉」と書き込まれます。これを *memo2 と参照すれば memo を見つけ出すことができます。さらに **memo2 と参照すれば りんご を見つけ出すことができるということです。ナイス0

 

TAG