ポインタとは
ポインタはとてもわかりにくく、C言語が難しいと言われる所以の一つでもあります。
ですがこれがわかれば、出来ることの幅が大きく広がります。
ポインタを簡単に説明するのであれば「変数のアドレスを持った変数」です。
これだけでは何かわからないでしょう。詳しく説明していきます。
ポインタの理解のために、コンピュータのメモリについて理解をしておく必要があるため説明します。
ここまで何気なく使っていた変数や配列について考えましょう。
ソフトウェアであるプログラムはハードウェアであるコンピュータ上で動いています。
具体的には、プログラムで定義した変数はコンピュータ上のメモリ(主記憶装置)上に一時的に保存されています。
つまり、「変数を宣言する」ということは「メモリ上に変数用の領域を確保する」と言い換えられます。
また、同様に「変数に値を代入する」とは、「確保した領域内のデータを書き換える」ことと言えます。
主記憶装置としてのメモリはRAM(Random Access Memory)なのでメモリ内のランダムな位置にデータを保存します。
その保存したデータの位置を表す数列をアドレスといいます。これは1バイトごとに割り振られています。
つまり、「変数のアドレス」とはその変数が保存されている領域の最初の1バイト目のメモリのアドレスのことを指します。
なんとなくイメージは掴めたでしょうか。
ポインタ(pointer)とはある変数の保存されているメモリ上のアドレスを指す、特別な変数のことです。
これが実際にどんなことに役に立つのかは別のページで紹介します。
ポインタの使い方
ポインタ変数の定義は以下のように行います。
【参照元の変数の型】 *【ポインタ変数名】;
【ポインタ変数名】 = 【参照元の変数名】;
また、宣言と代入を一度に行うこともできます。
【参照元の変数の型】 *【ポインタ変数名】 = 【参照元の変数名】;
変数のアドレスを渡すときには変数名の前に&をつけます。
scanf_s()関数もこれを使っています。
scanf_s("%d", &n);
これにより、メモリ上の変数を直接参照することができます。
このようなデータの渡し方を参照渡しといいます。