728x90
군대에서 C언어를 복습하다가 포인터와 배열의 관계에 대해 궁금한점이 생겨서 한 번 알아보았다.
궁금한 점은 사진에 나와있는 코드를 실행해보고 생겼는데, '어째서 존재하지 않을 int arr[2][0]의 주소(메모리)에 접근이 가능한가?' 였다.
그리고 '접근이 가능하더라도 왜 그 값은 쓰레기 값이 아닌, int arr[1][1]의 주소에 4바이트를 더한 정상적인 주소값이 나오는지' 가 궁금했다.
이 결과를 보고 왜 그런지 알아보기 위해,
일단 sizeof 연산자를 이용해보았다.
하지만, 배열의 크기는 16바이트로 정상적인 값이 나왔다.
그리고 int arr[3][0]이나 다른 주소값에도 접근을 해보았지만 에러만 발생했다.
아는대로 왜 그런지 알아보려고 했지만 알 수 없어서 질문을 한 결과.
《 int arr[2][0]의 주소에 접근해도 에러가 없는 이유는, C에서 배열 마지막 원소의 바로 다음 위치는 가리켜도 적법하기 때문이다. 단지 그걸 참조(읽거나 쓰기)해선 안될 뿐이다. 이것은 for문 같은 곳에서 ps++ = last_elem 와 같은 용법을 배려한 것이다. 》
라고 알려주셔서 해결할 수 있었다.
'Programming > C' 카테고리의 다른 글
C를 이용한 K-means Clustering 구현 (0) | 2023.08.07 |
---|---|
포인터 관련하여 정리 (0) | 2021.11.15 |