int a[6];
a[0] = 1[a] = *(a+2) = *(3+a) = 0;
4[a]= "ABC"[0];
a[5] = 1["DEF" + 1];

위 코드는 컴파일하는 데 아무런 문제가 없다.

a[5]에는 ‘F’가 들어간다.

결론: 컴파일러의 눈으로 볼 때 배열은 포인터이다. 끗.

void swap(void* a, void* b)
{
	void* temp;

	temp = a;

	a = b;

	b = temp;
}

//vs

#define SWAP(a,b) ((a)^=(b)^=(a)^=(b))

//매크로 풀어보기
void main()
{
	//a = 1010, b = 0011
	int a = 10, b = 3;

	a ^= b; //a = 1001 == 1010 ^ 0011;
	b ^= a; //b = 1010 == 0011 ^ 1001;
	a ^= b; //a = 0011 == 1001 ^ 1010; 
}