C言語を学ぶ上で、重要な考え方に「ポインタ」が挙げられます。
ただ、このポインタという概念はわかりにくく、ここでつまづく人が多いです。
ここではポインタに着目し「ポインタ変数の意味やアドレスとの関係は?宣言・初期化・代入のの仕方や使い方」にptintfを使った例題を元に解説していきます。
C言語のポインタとは?アドレスとの関係は?【ポインタ変数】
それでは以下でC言語におけるポインタの概念について確認していきます。
まずポインタとは「ポインタ変数」の略であり、このポインタ変数とは「アドレスを格納する少し変わった変数」と捉えるといいです。
通常の変数では「値」などを格納するのに対して、ポインタ変数では「アドレスを入れる」のが大きな違いです。
ポインタの宣言方法や使い方・初期化方法【ptintf使用】
まずポインタ変数を宣言する際には * をポインタ変数の前に付けます。
具体的には「型 *ポインタ変数」と記載ましょう。
int *pXなどと付ければOKです。ここでpXは任意ですが、ポインタを意味するpを頭に付けるのがおすすめです。
コードの例は以下の通り(例題)
#include <stdio.h>
int main(void)
{
int x; //変数xの宣言
int *pX; //ポインタpXの宣言
x = 999;
pX = &x;
printf("xの中身は%dです。\n", x);
printf("xのアドレスは%dです。\n", &x);
printf("ポインタの値(アドレス)は%dです。\n", pX);
return 0;
}
実際にVScodeで処理している状況は以下の通り。
出力結果は以下の通り。
xの中身は999です。
xのアドレスは6422040です。
ポインタの値(アドレス)は6422040です。
変数xのアドレス(&x)とポインタ変数pXが「6422040」として一致していることがわかりましたね。
ポインタ変数を初期化する際の注意点としては、通常の変数と同じように「int *pX = 10;」などとしてはいけないことです。
上述のようポインタはあくまで「アドレス」を格納する変数のため、この記載方法では、よくわからない場所に設定していることになってしまうわけです。
そのため、例題のように
・対応する変数の宣言・初期化
・その変数のアドレス(&x)をポインタ変数(pX)に代入する
という流れで処理しましょう。
ここでは
・変数xの宣言
・ポインタ変数pXの宣言
・変数xの初期化として999を入れる。同時に対応するメモリが確保・アドレスが振り分け
・ポインタ変数の初期化として、変数xのアドレスをポインタ変数に入れる
・printf関数を用いて、変数xやそのアドレス・ポインタの中身(アドレス)を出力
としています。
間接参照演算子*を用いてポインタから変数の中身を取得する
なお宣言時に使用の * を、ポインタの前につけた場合には間接的に「変数の中身」が得られます。
以下の1行を足します。
printf("ポインタよりxの中身を出力させると%dです。\n", *pX);
処理の様子は以下の通り。
つまり*pXにて、間接的に変数xの中身を出力させることができるのです。
ポインタよりxの中身を出力させると999です。
まとめ ポインタの意味・宣言・初期化・代入などの使い方【ptintf使用の例題・練習問題】
ここでは、ポインタとは?アドレスとの関係・宣言や初期化・代入の使い方【ポインタ変数の意味をわかりやすく解説:ptintf使用の例題・練習問題】にてういて解説しました。
x ⇔ *pX (中身)
&X = pX (アドレス)
という対応関係を理解するのがポインタを理解するポイント(笑)です。
C言語をマスターし、日々の業務に役立てていきましょう。