3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C言語のポインタをコードと図で整理する

Last updated at Posted at 2021-10-03

C言語について日々勉強中です。極力文書を使わずにコードと図で簡潔にC言語のポインタを整理しました。

勉強中なので誤り等あれば、コメントでご指摘いただけるとありがたいです。

前提

変数は以下の2の要素から構成されます。

  1. アドレス

例)整数型の変数
image.png

例)整数型へのポインタ変数
image.png

 ポインタ変数は「値」に他の変数などのアドレスが格納されています。
 ポインタ変数自身もアドレスを持ちます

#変数の各部分

例)整数型の変数
image.png

例)整数型へのポインタ変数
image.png
 ポインタ変数は使用時に*を変数の前につけることで、ポインタ変数の値に格納されているアドレスが指す場所に保存されている値を参照できます。

#サンプルプログラム

#include <stdio.h>

int main() {

        int data;
        int *ptr1;
        int **ptr2;
        int ***ptr3;
	
        data = 5;
        printf("(A) 整数型の変数dataの値 = %d\n", data);
        printf("(B) 整数型の変数dataのアドレス = %p\n", &data);

        // 以下はコンパイルエラー
        // printf("ptr1が指す場所に保存されている値 = %d\n", *data);

        ptr1 = &data;
        printf("(C) 整数型の変数dataへのポインタ変数ptr1の値 = %p\n", ptr1);
        printf("(D) 整数型の変数dataへのポインタ変数ptr1のアドレス = %p\n", &ptr1);
        printf("(E) *ptr1が指す場所に保存されている値 = %d\n", *ptr1);

        ptr2 = &ptr1;
        printf("(F) ポインタ変数ptr1へのポインタ変数ptr2の値 = %p\n", ptr2);
        printf("(G) ポインタ変数ptr1へのポインタ変数ptr2のアドレス = %p\n", &ptr2);
        printf("(H) *ptr2が指す場所に保存されている値 = %p\n", *ptr2);
        printf("(I) **ptr2が指す場所に保存されている値 = %d\n", **ptr2);

        ptr3 = &ptr2;
        printf("(J) ポインタ変数ptr2へのポインタ変数ptr3の値 = %p\n", ptr3);
        printf("(K) ポインタ変数ptr2へのポインタ変数ptr3のアドレス = %p\n", &ptr3);
        printf("(L) *ptr3が指す場所に保存されている値 = %p\n", *ptr3);
        printf("(M) **ptr3が指す場所に保存されている値 = %p\n", **ptr3);
        printf("(N) ***ptr3が指す場所に保存されている値 = %d\n", ***ptr3);
}

#サンプルプログラムの実行結果
image.png

#サンプルプログラムの実行結果を図解
image.png

ポインタを関数の引数にした場合や配列についてはまた次の機会に…

3
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?