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 * 型にポインタを変換して操作するといった方法が考えられます。