해당코드의 23행과 29행이 이해되지 않습니다.
int array는 4byte단위로 주소가 지정되기 때문에 \0로 구분할 필요가 없죠.
int list[3]; 로 배열 선언시 메모리에 4바이트단위의 3칸의 공간이 할당되고, 각 방은 index(번호)를 붙여서
list[0], list[1], list[2]로 구분됩니다.
list[4]는 당연히 존재하지 않기 때문에, 위 코드에서 보시다 싶이 오류가 발생하여 //(코멘트)처리하였습니다.
그런데 왜 23행의 &list[3]는 되고 29행의 list[3]은 되지 않는지 궁금하네요.
애초에 list[3]은 존재하지 않으니 23행도 실행되어서는 안되지 않나요?
&list[3]이 존재하고 이것이 만약에 \0이고 따라서 주소값이 있다고 가정해서 코드가 실행된다고 하면,
29행에서 list[3]의 값을 구할때 \0를 도출하거나, \0를 도출할 수 없다는 에러가 나와야 하는데,
29행 실행시 컴퓨터는 저에게
" list 배열은 index가 0, 1, 2 밖에 없는데 너는 배열의 범위를 넘어가는 index 3을 호출했으니 오류야. " 라고 말하는데 뭐가 문제인지 모르겠습니다.
해당강의 7분 15초까지 보다가, 갑자기 궁금해서 이것저것 만져보다가 이지경까지 와버렸네요...
+ 반복문을 사용할 경우 배열의 범위를 벗어났음에도 주소가 표기되네요. 점점 아리송해집니다.
<입력>
for(int i = 0; i < 5; i++)
{
printf("address of list[%i] = %p\n", i, &list[i]);
}
<결과>
address of list[0] = 0x1b2f2a0
address of list[1] = 0x1b2f2a4
address of list[2] = 0x1b2f2a8
address of list[3] = 0x1b2f2ac
address of list[4] = 0x1b2f2b0
comment