C言語のきほん「ポインタの基本(1)アドレスを表示する」

スポンサーリンク
C言語

今回は、ポインタの学習の前に「変数(オブジェクト)とアドレス」について理解を深めよう。

ご紹介するのは、変数(オブジェクト)のアドレスを表示するプログラムである。

なお、本プログラムは、Windows 11 Home(23H2)上で、  Visual Studio Code(1.89.1)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。

変数(オブジェクト)とアドレス

変数=オブジェクトは、これまで、数値などを格納するためのバラバラの箱の様に考えてきた。

ところが、変数=オブジェクトは、記憶域(メモリ空間)の一部である。

広大な空間に様々なオブジェクトが存在するので、それぞれの「場所」を何らかの方法で表す必要がある。場所を表すのが「番地」であり、アドレスと呼ばれる。

上図では、intオブジェクトnのアドレスが212で、intオブジェクトxのアドレスが216であることを表す。

それでは、オブジェクトのアドレスを調べてみよう。

オブジェクトのアドレスを表示するプログラム

//オブジェクトのアドレスを表示するプログラム
#include <stdio.h>

int main(void)
{
    int n;
    double x;
    int a[3];

    printf("nのアドレス:%p\n",&n);
    printf("xのアドレス:%p\n",&x);
    printf("a[0]のアドレス:%p\n",&a[0]);
    printf("a[1]のアドレス:%p\n",&a[1]);
    printf("a[2]のアドレス:%p\n",&a[2]);

    return 0;

}

実行結果

nのアドレス:0x7fff2d0dd2fc
xのアドレス:0x7fff2d0dd300
a[0]のアドレス:0x7fff2d0dd30c
a[1]のアドレス:0x7fff2d0dd310
a[2]のアドレス:0x7fff2d0dd314

オペランドのアドレス取得に使っているのが、アドレス演算子と呼ばれる単項&演算子である。

単項&演算子   &a      aのアドレス(aへのポインタを生成する)

本プログラムでは、変数nとxと配列aの全要素のアドレスを表示している。

表示されているアドレスは、16進数で表されている。(数値の直前に「0x」を付ける)

オブジェクトのアドレスは、アドレス演算子&で取り出せる。

参考)新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ

コメント

タイトルとURLをコピーしました