프로그래밍/C

C 배열 접근

msh1307 2022. 3. 25. 23:50

문제를 풀다가 모르는 부분을 발견했다. 검색을 해도 안나와서 영어로 끄적거렸더니 확실한 답을 찾을 수 있었다. 

배열을 []를 통해서 접근하는 것과 주소 그 자체로 접근하는 것의 차이를 잘 모르고 있었다. 

배열 그 자체는 주소를 가리키고, []는 *처럼 그 주소가 가리키는 값을 가리킨다. 

 

https://www.programiz.com/c-programming/examples/access-array-pointer

 

C Program to Access Array Elements Using Pointer

 

www.programiz.com

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