10.ポインタ

10-1. ポインタについて
10-2. ポインタの宣言
10-3. ポインタの使用例
10-4. ポインタと関数
10-5. 関数への配列の渡し方とポインタとの関連
10-6. ポインタで配列
10-7. ポインタ文字列と標準文字列の違い
10-8. ポインタの加減算
10-9. 二次元配列とポインタ
10-10. ポインタのポインタ
10-11. ポインタ配列
10-12. 二次元配列をポインタからアクセスする
10-13. ポインタ関数
10-14. 関数のポインタ
10-15. ポインタ関数ポインタ
10-16. コマンドライン

10-1. ポインタについて

いよいよC言語の難関の一つといわれるポインタに来てしまいました。
このポインタがあるために志半ばにして息絶えたプログラマーは数知れません。

・・・ちょっといいすぎたかな?

ポインタ地獄から瀕死の状態でなんとか生還した私がポインタの回避について手助けを致します。←話がちがうって(^^;;

基本的にポインタを使うとプログラムの解析が大変になるので必要最低限に留めておくべきだと考えています。これで人に見せる時分かりやすいプログラムであれば事はスムーズに進むでしょう。

しかし、他人の書いたプログラム、しかもポインタを駆使した素晴らしいプログラムだった場合・・・地獄です。

これからポインタについて説明するわけですが、ポインタをおぼえる過程で重要な事を述べておきます。

・ポインタは何のためにある?
・ポインタは何を格納する?
・ポインタを使うとどんな利点がある?

の3つです。初めて習うのに上の3つを肝に命じるのも酷ですが、それを忘れた時ポインタでつまづくのでは?っと私の経験談です(爆)。

因みに構造体の時も、「そんなの使わなくたって立派なプログラムできるよ~だ」と言ってたら、やはりつまづいてしまいました(爆)。

◇ポインタって何?

それでは早速ポインタとはC言語ではどんな働きをするものか簡単に説明します。
一般的にポインターと呼ばれるものの共通点は、目的地を指し示すものになります。

ポインター犬は獲物を発見すると立ち止まってその方向を指し示すため、それが名前の由来になったそうです。(参考:広辞苑)
勿論レーザーポインタも目的とするものをレーザーで指し示すためにあります。
・・・そういえばマウスの矢印もポインターっていいますね(笑)。
おまけにショートカットやリンクもそうです。

そしてC言語のポインタもある場所を指し示すものなのです。

-そのある場所とは?

プログラムの場合、場所として扱えるのはメモリになります。
今まで、メモリーに関しての説明もしていないので従来のメモリの番地が・・・という説明からは入らないつもりです。
それよりもグラフィカルで直感的に理解できるような方法を考えています。

例としてデスクトップとアイコンとマウスポインタで説明します。

デスクトップはメモリー全体を示します。
そしてアイコンが所々に散乱しています(笑)。
そこでマウスポインタに指示を与えるとします。

まず左上のマイコンピュータのアイコンをクリックしてください。・・・と指示します。

そのためには目でマウスポインタを追いながら目的のアイコンまで移動します。
そしてクリックします。これで目的のアイコンが選択されました。
・C言語ではポインタが目的の変数の場所を示した状態になります。

それからダブルクリックするなり操作します。
・C言語のポインタでも目的の変数を操作することが可能になります。

最初の「ポインタは何を格納する?」は変数の場所でした。

マウスポインタの例ではあまりに抽象的だったので実際のプログラミングに置きかえるのは難しかったのではと後で読み返すとそんな感じでした。

それではもっと本質的な部分をショートカットの例を用いて説明します。

◇ショートカットの例

まず、デスクトップ上で右クリックし新規作成でショーカットを選びます。
これで一応ショーカットは作られますがこれだけではどこにもリンクしていないためまったく機能しません。
・C言語ではポインタの宣言にあたります。

次に、リンクする場所を決めます。URLでもプログラムの場所でもかまいません。これでやっとショートカットとして機能します。
・ポインタに変数のアドレスを設定するのと同等です。

そしてそのショートカットをダブルクリックすることにより遠隔操作を可能にします。
・ポインタを使って本来操作できない領域にある変数を使うことができます。

注意!
ショーカットで気をつけないといけないのはリンク切れです。
ポインタにおいても同じ事で設定したアドレスに目的の変数が存在しなくなった場合プログラムが暴走する可能性があります。