해당 배열의 시작 주소를 0x1000이라고 해보겠습니다.
a[0]의 주소는 0x1000, a[1] 의 주소는 0x1004, a[2]의 주소는 0x1008로 배정 됩니다.
int size가 32Bit이기 때문에 4byte씩 떨어져서 연속된 형태로 위치하게 됩니다.
포인터 끼리 뺄 때는 자료형의 크기를 가진 데이터가 몇개인지로 값이 계산됩니다.
1. printf("%d ",&a[1]-&a[4]); 는 -3이 나오게 됩니다.
2. printf("%d ",(int)(&a[1])-(int)(&a[4]));
-> 해당 연산은 포인터 연산에서 정수 연산으로 바뀌었기 때문에 두 주소값의 실제 차이인 -12가 나오게 됩니다.
3. printf("%d ",(int)((&a[1])-(&a[4])));
-> -3이나온 상태에서 타입 캐스팅을 한것이기 때문에 값은 -3으로 바뀌지 않고 나옵니다.