【C言語】ポインタとアドレスの違いについて解説

この記事では、C言語におけるポインタとアドレスの関係について詳しく解説します。

ポインタとは、変数やデータのメモリ上のアドレスを格納するための変数であり、アドレスとはメモリ上の特定の場所を指す数値です。

目次から探す

ポインタとアドレスの関係

ポインタとアドレスは、C言語において非常に重要な概念です。

ポインタは、変数やデータのメモリ上のアドレスを格納するための変数です。

アドレスとは、メモリ上の特定の場所を指す数値のことです。

ポインタとアドレスの関係性

ポインタは、変数のアドレスを格納するための変数です。

変数にはそれぞれメモリ上のアドレスが割り当てられており、ポインタはそのアドレスを格納することができます。

ポインタを使うことで、そのアドレスに格納されている値にアクセスすることができます。

以下に、ポインタとアドレスの関係性を示すサンプルコードを示します。

#include <stdio.h>
int main() {
    int num = 10;  // 変数numに値10を代入
    int *ptr;     // ポインタ変数ptrを宣言
    ptr = &num;   // 変数numのアドレスをポインタ変数ptrに代入
    printf("変数numの値: %d\n", num);
    printf("変数numのアドレス: %p\n", &num);
    printf("ポインタ変数ptrの値: %p\n", ptr);
    printf("ポインタ変数ptrが指す値: %d\n", *ptr);
    return 0;
}

上記のコードでは、変数numに値10を代入し、ポインタ変数ptrを宣言しています。

そして、ptr&numを代入することで、ptrnumのアドレスを指すようになります。

*ptrを使うことで、ptrが指すアドレスに格納されている値にアクセスすることができます。

ポインタを使った関数への引数の渡し方

ポインタを使うことで、関数に変数を参照渡しすることができます。

参照渡しをすることで、関数内で変数の値を変更することができます。

以下に、ポインタを使った関数への引数の渡し方を示すサンプルコードを示します。

#include <stdio.h>
void changeValue(int *ptr) {
    *ptr = 20;  // ポインタが指すアドレスに値20を代入
}
int main() {
    int num = 10;  // 変数numに値10を代入
    printf("変更前の変数numの値: %d\n", num);
    changeValue(&num);  // 変数numのアドレスを渡して値を変更
    printf("変更後の変数numの値: %d\n", num);
    return 0;
}

上記のコードでは、changeValue関数を定義し、引数としてポインタ変数ptrを受け取っています。

changeValue関数内で、*ptr20を代入することで、ポインタが指すアドレスに新しい値を代入しています。

そして、main関数内でchangeValue関数を呼び出し、変数numのアドレスを渡して値を変更しています。

以上が、ポインタとアドレスの関係についての簡単な説明です。

ポインタを使うことで、変数のアドレスにアクセスしたり、値を変更したりすることができます。

1 2 3
目次から探す