포인터와 포인터가 가리키는 변수를 선언해보자.
int * ptr;
int var;
ptr = &var;
이렇게 프로그램을 실행시키면 포인터는 var를 가리키고 있게 된다.
ptr ㅡ> var
배열을 선언해보자.
int arr[10];
이렇게 하면 이 배열의 이름인 arr는 10개의 요소로 구성된 배열의 첫번째 값(0번째 요소)의 주소값을 의미한다.
이는 arr이라는 배열의 이름이 arr 배열의 첫번째 값을 가리키고 있다. 따라서, arr이라는 배열명도 일종의 포인터이다.
arr ㅡ> arr[0]
위의 ptr은 변수이기 때문에, ptr = &num와 같이 가리키는 값을 변수 var에서 변수 num으로 바꿀 수 있다.
그러나, arr은 오로지 배열의 처음인 요소만 가리킬 수 있다. 위의 ptr과 같이 arr = sth 과 같이 어떠한 것을 대입하는 연산이 불가능하다.
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
라고 arr배열을 초기화를 했을 때,
*arr = 10;
이라고 한다면, arr 배열은 다음과 같이 되어 있음을 볼 수 있다.
{10, 1, 2, 3, 4, 5, 6, 7, 8, 9}
이렇듯 arr은 배열의 첫 요소에 관하여 포인터 역할을 하고 있는 것이다.
더불어, int형 배열 arr임을 먼저 선언했기 때문에, arr이 int형 값을 가리키고 있다는 정보를 갖고 있기 때문에
*arr(:arr이 가리키고 있는 메모리로의 접근)이 에러없이 작동할 수 있는 것이다.
즉, 포인터 ptr은 다른 것을 가리킬 수 있는 변수이지만, 배열의 이름 arr은 오로지 하나(배열의 첫 요소)만 가리킬 수 있는 상수라는 차이가 있다. 그보다 더 중요한 것은, 포인터로 따로 선언하지 않아도 int형 배열로 선언된 arr에서 배열명인 arr이 여기서 int형 포인터라는 사실이다.
'컴퓨터 사이언스 > C언어' 카테고리의 다른 글
[C언어] * 연산자와 [ ] 연산자 : 포인터를 대상으로 사용할 수 있는 연산자 (0) | 2020.08.14 |
---|---|
[C 언어] 배열에 관해서: 배열명 =포인터 (0) | 2020.08.10 |
[C언어] 포인터 사용시 주의해야할 점: 포인터 변수의 초기화 (1) | 2020.08.10 |
[C언어] 포인터가 가리키는 메모리를 참조하는 * 연산자 예제 (0) | 2020.08.10 |
[C언어] & 연산자 (Ampersand, 앰퍼샌드) (0) | 2020.08.09 |