こんにちは､ お帰りなさい｡ この講義では､ ポインタの構文､ ポインタの概念､
ポインタへのアドレスの割り当て､ そしてポインタに対する何らかの出力に慣れ親しんでもらった前回の課題のデモまたは解決策を提供したいと思います｡
そこで､ コードブロックを用意して､ 新しいプロジェクト､ つまり､
ポインタの基本という名前の新しいCプロジェクトを作成します｡
だから､ 私たちはこれらすべての方法を知っているのです｡ コンソールアプリケーションを選択し､
cがあることを確認して､ このポインタの基本を呼び出すだけです｡
このポインターの概念は､ 本当に､ 本当に重要です｡
だから､ まずはスロースタートで､ そこから進んでいくんです｡
それでは､ どうぞ｡ ここで､ 私たちのメインがあります｡
あとは､ 整数型変数とポインタ型変数をそれぞれ1つずつ作成するだけです｡
そして､ 両方を初期化したいのです｡
まず最初に､ 整数型の変数を作って､ それをnumberまたはnumと名付けようと思います｡
そして､ これを150に初期化します｡
ポインタ変数を作るには､ 同じ型である必要があります｡
ポインターを作るには､ データ型とアスタリスクを宣言にすればよく､
あとはこれをポインター番号のpnumと呼ぶことにします｡
通常､ ポインターの変数はpという接頭辞で始めたいものです｡
また､ ポインターを作成する際には､ 常にNULLに初期化するのがよいでしょう｡
Nullは､ ポインタが何も指していないことを意味する特別なキーワードです｡
num integerとnum
integerポインタの2つの変数を初期化したら､ ポインタに何かを代入したいと思います｡
なぜなら､ 今､ 私たちのポインタは､ メモリ上の何も指していないからです｡
そして､ ポインタを割り当てる先が､ 実際にメモリが割り当てられた場所であることを確認したいのです｡
つまり､ この場合､ numに代入するのであれば､ numは6行目の整数で､
そのためにメモリが割り当てられていることになります｡
C言語では､ 変数宣言があると自動的にメモリが確保されます｡
この7行目のポインタも､ ポインタを格納するためだけにメモリが割り当てられています｡
必ずしも､ 指し示すものに対してメモリが割り当てられているとは限りません｡
つまり､ アドレスの値であるpnumに符号を付けるには､
pnumイコールアンパサンドと言えばよいわけで､ これはoperatorのアドレスであり､
それをnumのアドレスに割り当てたいのです｡
Numにはすでにメモリが割り当てられているので､ それを宣言しました｡
つまり､ 9行目はnumのアドレスをポインタに代入しているだけです｡
というくらいにシンプルです｡
さて､ ポインターを作ってそれにアドレスを割り当てるとき､ 自分でダイナミックメモリを作ってそれを割り当てることもできます｡
でもそれは､ また別の演習で｡ この場合､
すでに変数が作成されています｡ その変数の値を指し示すことになる｡
numのアドレスを割り当てる必要があります｡
さて､ プリントアウトした後､ 割り当てを行い､ すべてを初期化しました｡
あとは､ いくつかの情報をプリントアウトするだけです｡
そこで､ printfを使って､ まず､ pnumアドレスの値をプリントアウトしたいと思います｡
さて､ pnumの値が何になるかというと､ アドレスですが､
pnumのアドレスです｡ そして､ ここでは実際にポインタのアドレスを言うことができますので､
pとします｡ そして､ ここにポインタのアドレスを入れるだけでいいのです｡
つまり､ ここではpnumのアドレスと言うことになります｡
これは､ メモリを割り当てたポインタのアドレスを示しています｡
ポインターの値ではありません｡
ポインタの値もアドレスになる､ numのアドレスになる｡
ではここで､ まずnumもプリントアウトしてみましょう｡ そこで､ ここではnumのアドレスをプリントアウトすることにします｡
そしてまた､ パーセントpと言うアドレスをプリントアウトしたいと思います｡
そして､ numのアドレスと言うことになります｡
また､ numのアドレスはpnumの値と一致する必要があります｡
pnumのアドレスは､ メモリ上のポインタなので､ 異なるものになります｡
そこで､ pnumの値をプリントアウトするのですが､
pnumのアドレスと言うべきでしょうか｡
そして､ pnumの値もプリントアウトします｡
という変数があり､ これもアドレスになるのですが､ これがちょうどpnumになるのです｡
そして最後に､ pnumが指している値が何であるかを表示したいのです｡
つまり､ pnumが指しているものの値です｡
そして､ これが実際に指す型は整数になります｡
だから､ これはパーセントdになる｡
そして､ 実際に改行を加えて､ これを読めるようにしてみましょう｡
そして､ その値を取得する方法として､ 実際に指し示しているのが､ インダイレクト演算子なのです｡
アスタリスクとポインター名をやるわけですね｡
そして､ この値が指しているのは150であるべきだということを教えてくれます｡
つまり､ 11行目でnumのアドレスをプリントアウトしているのです｡
これは何らかの数字か16進数になります｡
そして12行目で､ 7行目で確保したばかりのpnumのアドレスを出力しています｡
pnumのポインタをどこかに保存しておかなければならないからです｡
そして､ ポインタの値（numのアドレスだけ）をプリントアウトします｡
そして､ pnumのアドレスをプリントアウトするときには､ アンパサンドを使わなければならない｡
そして, pnumが指している値を出力します．これは,
インダイレクト演算子を使ったデリファレンスです．
では､ これをビルドして実行すると､
これらのすべての値が表示されるはずです｡
つまり､ メモリ上のこの番号だけのアドレスは0060FF0Cです｡
pnumのアドレスは0060FF08と何か違うものになりそうです｡
numのアドレスであるpnumの値は1行目と一致するはずであり､
それはFFOCを行う｡
そして､ pnumが指している値､ つまり150です｡
つまり､ ポインタは3つの値を持つことができるのです｡ そのアドレス､ 別のアドレスであるポインタの値､
そしてそのアドレスが指し示すものの値です｡
そしてまた､ アンパサンドは常にメモリ上のアドレスを示す｡
Pnumにはアドレスが含まれます｡ ポインターの名前を言うだけで､ それをプリントアウトすることができます｡
そして､ その値が指し示す値を取得するために､ 間接演算子であるアスタリスクを使用すると､
150という値が得られます｡
以上がポインタの基本で､ 構文に慣れることです｡
また､ ポインタの概念を説明し､ ポインタがどのようにアドレスの値を含むのか､
ポインタの値はアドレスであることを説明しようとします｡
ポインターは本当に重要な概念なのです｡
ありがとうございます｡