배열은 말이다...
첫 번째 칸의 배열 시작 주소값만 알면 두 번째 칸의 시작 주소 값도 알 수 있어
왜?
배열은 메모리에 순차적으로 저장되기 때문이지...
즉 !!
int a[5]; 에서
a[0]의 시작주소가 1이라고 하면
a[1]은 시작주소가 5라능....
왜냐하면 int는 4바이트이고 배열은 메모리에 순차적으로 저장되기 때문에
자연히 1에서 4를 더한 값이 a[1]의 시작주소가 되는 것이지...
또한 a[0]의 시작주소를 구할려면 앞에 &를 붙이면 된다. 즉 a[0]의 시작 주소는 &a[0]로 구해짐
그리고 배열은 포인터와 마찬가지로 +1 을 더하면 해당 사이즈 만큼의 크기가 더해진다.
즉 int a[5]에서 &a[0]의 값이 1이라고 가정하면
a[0] + 1은 a[0] + sizeof(int)*1 가 되어 1 + 4 = 5가 나온다.
즉 a[1]의 주소값이다. 즉 &a[1] !
근데 여기서 생각해봐야 할 것이 있다. 바로 연산자 우선순위이다.
&도 연산자 이고 []도 연산자이다. 우리가 사칙연산에서 + * 가 섞여있으면 *를 먼저해주는 것 처럼
컴퓨터도 연산자 우선순위에 따라 먼저 계산을 한다.
c언어는 []가 &보다 우선수위가 높다. 즉 []가 높은 우선순위이다.
따라서 &a[1]이렇게 적으면 a[1]의 주소값을 계산하게 되어있다.
이 연산자 우선순위를 여기서 말하는 이유는 중요하기 때문이다.
어디서 중요하냐? 우리를 가장 괴롭히는 포인터 배열, 혹은 배열 포인터에서 정말 중요하기 때문이다.
[]가 &보다 높다는 것을 꼭 기억하자
아오 나중에 적어야지