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

