d배열이 주소값이라니 이게 무슨 허무맹랑한 소리인가 싶을 수 있다.
물론, 배열 안에는 값들이 들어있는 것이 맞다.
그러나, 우리가 정의한 배열의 이름. 그 이름에는 주소값 지정되어있다.
이해가 되지 않아도 좋다. 아래의 설명을 보도록 하자.
우리가 int a[5] = {1,2,3,4,5}; 라고 배열 a를 정의 및 초기화 했다고 해보자.
이때, 배열 a를 하나의 방 관점으로 본다면, 배열 a의 각각의 인덱스(a[0], a[1], ... 과 같은 것)들은
배열 a 안의 또다른 방이라고 생각할 수 있다.
그러니까, 내가 말하고 싶은 바는 무엇이냐면 배열 a라는 것에도 주소가 있고, 그 배열 안의 인덱스들에도 따로 주소가 존재한다는 것이다.
그렇기에 배열의 이름은 주소값이다.
한가지 코드를 보며 이해해보도록 하자.
#include <stdio.h>
int main(void) {
int arr[3] = {10,20,30};
printf("%p\n", arr);
for (int i=0; i<3; i++ )
printf("%p\n", arr[i]);
}
자, 보이는가. 배열은 주소이며, 배열의 인덱스 또한 또다른 주소를 가지고 있음을 파악할 수 있다.
따라서 포인터 변수 = 배열을 사용할 때에는, 배열 앞에 &를 붙이지 않는다. 배열은 그 자체로서 주소값이기에.
#include <stdio.h>
int arrChg(int *ptr) {
ptr[2] = 50;
}
int main(void) {
int arr[3] = {10,20,30};
arrChg(arr);
for (int i =0; i<3; i++)
printf("arr의 %d번째 수 : %d\n", i, arr[i]);
}
위의 코드를 이해해보자. 내가 여기서 중점적으로 말하고 싶은 것은 int *ptr에 arr을 넣었다는 것. &arr이 아니라는 것. 이것이 내가 짚고 싶었던 바이다.
'프로그래밍 > C' 카테고리의 다른 글
[C언어] 배열과 포인터 사이의 관계 (0) | 2023.05.16 |
---|---|
[C언어] 포인터 - 정의, 연산자, 선언, 상호관계성 (0) | 2023.05.16 |
[C언어] 배열 - 문자 vs 문자열 (0) | 2023.05.16 |
[C언어] 함수의 선언과 정의 (0) | 2023.05.15 |
[C언어] 반환값 return에 대하여 (0) | 2023.05.15 |