C言語

【C言語】ポインタとは?アドレスとの関係・宣言や初期化・代入の使い方【ポインタ変数の意味をわかりやすく解説:ptintf使用の例題・練習問題】

当サイトでは記事内に広告を含みます。

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言語をマスターし、日々の業務に役立てていきましょう。