配列とポインタ

(ブログ記事の一覧は「こちら」)

C言語の配列とポインタについて説明します。

配列について

まずは配列の簡単なサンプルを確認していきます。
ファイル名の指定については、特に決まりはありません。ここでは sample1.c として作成してください。

#include <stdio.h>

void testArray() {
    int val0, val1, val2;
    val0 = 100;
    val1 = 200;
    val2 = 300;
    
    int array[3];
    array[0] = val0;
    array[1] = val1;
    array[2] = val2;

    printf("Array: %d %d %d\n", array[0], array[1], array[2]);
}

int main(void)
{
    testArray();
    return 0;
}

testArray()関数内で定義した変数の値を、変列の各要素に代入しただけのサンプルです。

配列の定義は、以下のように書きます。

 int array[3];

配列に対して実際に値を代入する場合は、以下のように要素の値を指定して行います。

 array[0] = val0;

Javaで配列を定義する場合は、int array[] = new int[3]; のようにnewを使用した書き方(データ領域を確保する方法)をしていましたが、C言語の場合は上のサンプルの書き方を含めて、いくつかの方法があります。それについては後ほどのページで説明します。

ポインタについて

配列として定義した変数に対して、先頭アドレスを指し示したものを「ポインタ」と呼びます。

簡単なサンプルを以下に示します。ファイル名は、sample2.c として作成してください。

#include <stdio.h>

void testPointer() {
    int array[3];
    array[0] = 100;
    array[1] = 200;
    array[2] = 300;
    
    int *p;
    p = array;
    
    printf("Pointer: %d %d %d\n", *p, *(p + 1), *(p + 2));
}

int main(void)
{
    testPointer();
    return 0;
}

testPointer()関数内で定義した配列の先頭アドレスをポインタ変数に渡しています。printf文で渡している値の記述方法についても確認してください。

ポインタの定義は、変数名の直前に「*」を付けて表します。

 int *p;

ポインタの変数pに対して、配列の先頭アドレスを指し示すには、以下のように書きます。

 p = array;

もちろん以下のように書いても大丈夫です。

 int *p = array;