Sample06

#include <stdio.h>

int main(void)
{
    char ary[2];

    *ary = 'A';
    *(ary + 1) = 'B';

    printf("ary[0]=%c\n", ary[0]);
    printf("ary[1]=%c\n", ary[1]);

    return 0;
}

実行結果

サンプル06の実行結果

Sample06 は、配列の要素に間接演算子 * を使って文字を代入しています。ary[1] に対して *(ary + 1) という形でアクセスしている点に注目してください。配列の先頭へのポインタ ary に 1 を加えたアドレス ary + 1 は、ary[1] のアドレスと等しくなります。実行結果を見れば、正しく ary[1] に値が代入されています。

ポインタの算術演算では、ポインタに 1 を加算した結果がアドレスの整数に 1 を加えた結果と一致するとは限らないことに注意してください。ポインタに対する演算には、ポインタの型に依存します。char 型のような 1 バイト型へのポインタに 1 を加えれば、1 バイト単位でアドレスが移動するでしょう。しかし 4 バイト型へのポインタに 1 を加えれば、4 バイト単位でアドレスが移動します。強制的に 1 バイト単位でアドレスの操作を行いたい場合は、char * 型にポインタを変換して操作するといった方法が考えられます。