CではArray[n]==n[Array]

タイトルのようなことを『C/C++によるプログラミングスタイルブック』という本で読んだのでメモ。

#include <stdio.h>

int main(void)
{
	int array[5] = {3, 5, 7, 9, 11};
	
	if(array[3]==3[array]){
		printf("array[3]:%d\n3[array]:%d\n", array[3], 3[array]);
	}
}

以下、結果

array[3]:9
3[array]:9

というのも、添字式の”array[index]”は”*((array)+(index))”で評価されるかららしい。つまり、足し算だから逆から足しても同じ結果になるということだそうだ。

ちなみに、文字列は文字の配列なので以下のようなことも。

#include <stdio.h>

int main(void)
{
	printf("\"abcde\"[3]:%c\n", "abcde"[3]);
	printf("3[\"abcde\"]:%c\n", 3["abcde"]);
}

以下、結果

“abcde”[3]:d
3[“abcde”]:d

上の”文字列”[index]という書き方は知ってたけど、下は知らなかった。

まあ、使う機会なさそうだけど(読んだ本にもこんな分かりにくい書き方をするなという例で書いてあった)。

コメント

タイトルとURLをコピーしました