シンタックスシュガー

ポインタを配列っぽく扱うよ!

#include <stdio.h>

int main(int argc, char *argv[])
{
	short array[3] = { 123, 456, 789 };
	short *p = array;
	printf( "&(array[0]) = 0x%016lX\n", (unsigned long)&(array[0]) );
	printf( "&(array[1]) = 0x%016lX\n", (unsigned long)&(array[1]) );
	printf( "&(array[2]) = 0x%016lX\n", (unsigned long)&(array[2]) );
	printf( "(p + 0) = 0x%016lX\n", (unsigned long)(p + 0) );
	printf( "(p + 1) = 0x%016lX\n", (unsigned long)(p + 1) );
	printf( "(p + 2) = 0x%016lX\n", (unsigned long)(p + 2) );
	printf( "*(p + 0) = %d, p[0] = %d\n", *(p + 0), p[0] );
	printf( "*(p + 1) = %d, p[1] = %d\n", *(p + 1), p[1] );
	printf( "*(p + 2) = %d, p[2] = %d\n", *(p + 2), p[2] );
	return 0;
}

実行結果
&(array[0]) = 0x00007FFF5FBFF900
&(array[1]) = 0x00007FFF5FBFF902
&(array[2]) = 0x00007FFF5FBFF904
(p + 0) = 0x00007FFF5FBFF900
(p + 1) = 0x00007FFF5FBFF902
(p + 2) = 0x00007FFF5FBFF904
*(p + 0) = 123, p[0] = 123
*(p + 1) = 456, p[1] = 456
*(p + 2) = 789, p[2] = 789

今日から、住所専用の入れ物をポインタって言うね。
関数の引数に配列を渡す前に、
ポインタに配列の先頭アドレスが格納して何に使うのか説明するよ。
ポインタには、配列の最初の入れ物の住所が入っているよ。
ポインタに+1や+2をすると、
次の入れ物や、その次の入れ物の住所が取得できるよ。

ポインタに*を付けると、ポインタに格納された住所の入れ物から、
値を取得したり、書き換えたりできるよ。
配列と同じように添字を付けても、値を取得したり書き換えたりできるよ。
今回みたいに、ヒトにとって分かりやすくする特別ルールを、
シンタックスシュガーっていうよ。

ポインタを配列のように使うことができるなんて、
Cコンパイラさんは、ヒトにもやさしいね!

Leave a Comment