C言語のきほん「ポインタの基本(8)ポインタと配列」

スポンサーリンク
C言語

今回は、密接な関係にある「ポインタと配列」について学んでいこう。

ポインタと配列

配列名は、その配列の先頭要素へのポインタと解釈される。

aが配列であれば、式aの評価で得られるのは、&a[0]である。

int a[5];
int *p = a;

ここでは、配列aとポインタpが宣言されている。
ポインタpに与えられた初期化子aは&a[0]のことであるので、ポインタpは、配列の先頭要素a[0]を指すように初期化される。

ポインタpが配列中の要素eを指すとき、
p + i は、要素eのi個だけ後方の要素を指すポインタとなり、
p – i は、要素eのi個だけ前方の要素を指すポインタとなる。

要素へのポインタp + iは、&a[i]のことである

このことをプログラムを作って確認してみよう。

配列の要素のアドレス(要素へのポインタ)を表示するプログラム」である。

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

配列の要素のアドレス(要素へのポインタ)を表示するプログラム

//配列の要素のアドレス(要素へのポインタ)を表示するプログラム
#include <stdio.h>

int main(void)
{
    int a[5] = {1,2,3,4,5};
    int *p = a;

    for (int i = 0; i < 5; i++)
        printf("&a[%d] = %p p + %d = %p\n",i ,&a[i],i ,p + i);

    return 0;
    
}

実行結果

&a[0] = 0x7ffcb19145a0 p + 0 = 0x7ffcb19145a0
&a[1] = 0x7ffcb19145a4 p + 1 = 0x7ffcb19145a4
&a[2] = 0x7ffcb19145a8 p + 2 = 0x7ffcb19145a8
&a[3] = 0x7ffcb19145ac p + 3 = 0x7ffcb19145ac
&a[4] = 0x7ffcb19145b0 p + 4 = 0x7ffcb19145b0

for文では、各要素へのポインタである、式&a[i]の値と、式p + iの値を表示している。

実行結果から、これら二つの値が同じであることが確認できる。

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

コメント

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