문제를 풀다가 모르는 부분을 발견했다. 검색을 해도 안나와서 영어로 끄적거렸더니 확실한 답을 찾을 수 있었다.
배열을 []를 통해서 접근하는 것과 주소 그 자체로 접근하는 것의 차이를 잘 모르고 있었다.
배열 그 자체는 주소를 가리키고, []는 *처럼 그 주소가 가리키는 값을 가리킨다.
https://www.programiz.com/c-programming/examples/access-array-pointer
data[0] is equivalent to *data and &data[0] is equivalent to data
data[1] is equivalent to *(data + 1) and &data[1] is equivalent to data + 1
data[2] is equivalent to *(data + 2) and &data[2] is equivalent to data + 2
...
data[i] is equivalent to *(data + i) and &data[i] is equivalent to data + i
주소에서 +1하면 배열의 자료형에 따라서 실제로 더해지는 값이 다르다고 한다.
예를 들어 4바이트 int형이면, data+1은 실제 data주소에 4가 더해지는 식으로 작동한다.
공부하던 도중, 이런 결과가 나왔는데, 만약 초과해서 주소가 더해지면 이런식으로 변수의 값을 읽어오기도 가능한 것 같아보인다.
얼떨결에 k의 값을 읽어오게 되었다. k의 주소를 출력해보았다.
보면 k변수가 arr보다 더 높은 주소에 위치해있다. 스택은 높은 주소에서 낮은 주소로 자라서, arr가 더 낮게 위치하고, 만약 저렇게 주소를 잘 더하면, k의 값을 알아낼 수 있는 것 같다.
'프로그래밍 > C' 카테고리의 다른 글
size_t, pid_t,ssize_t... (0) | 2022.05.03 |
---|---|
open, read 시스템콜을 이용한 파일 입출력 (0) | 2022.05.03 |
scanf, gets, fgets 차이 (0) | 2022.04.01 |
EOF(End Of File) (0) | 2022.03.31 |
함수 호출 방식 (0) | 2022.03.29 |