配列とポインタ

 変数とポインタの関係は、ここまで述べてきたとおりです。では、配列とポインタの関係はどうでしょうか。

 基本的には、例えば配列aryに対しては「&ary[0]」「&ary[1]」のように書けば、配列aryの各要素のアドレスを取得することが出来ます。ポインタでも配列の各要素にアクセスできるということです。実は、配列とポインタに関して、便利な使い方が存在しています。

 以下のプログラムを実行し、確認してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int ary[3];
    
    ary[0] = 1;
    ary[1] = 3;
    ary[2] = 5;
    
    int *pointer;
    pointer = ary;
    printf("アドレス:%p、中身:%d\n", pointer, *pointer);
    
    pointer = pointer + 1;
    printf("アドレス:%p、中身:%d\n", pointer, *pointer);
    
    pointer = pointer + 1;
    printf("アドレス:%p、中身:%d\n", pointer, *pointer);
    
    return 0;
}

 アドレスの値は変わりますが、以下のような表示が出ます。

アドレス:0x7fff5fbff83c、中身:1
アドレス:0x7fff5fbff840、中身:3
アドレス:0x7fff5fbff844、中身:5

 前にも述べたように配列はロッカーみたいなもので、メモリ上で配列を格納する場合、配列の各要素は隣り合った場所に作られます。メモリ上で連続しているのです。「pointer = ary;」のように書きましたが、このような「(ポインタ) = (配列名)」という書き方で、配列の先頭の要素にアクセス出来ます。また、「pointer = pointer + 1;」という形のアドレス計算ができます。つまり、ポインタに入っているアドレスに+1をすれば、配列の次の要素にアクセスできるのです。

 実際に、このようなポインタの扱い方で、配列の各要素の値が正常に表示されていることを確認して下さい。

■スポンサーリンク

このページの先頭へ