C언어 독학 배열 이름은 포인터이다
C언어 독학 배열 이름은 포인터이다
■ 배열은 같은 자료형의 데이터를 메모리에 연속으로 저장하는 것이고 포인터는 특정 변수의 메모리상의 주솟값을 저장하는 것인데요. 글의 제목처럼 배열 이름이 포인터라면 배열도 값이 저장된 메모리의 주솟값을 저장하고 있다는 의미겠죠? 다음 예제를 통해서 그 결과를 확인해보겠습니다.
▲ a [] 배열에 int형 자료형 세 개를 저장하고 있는데요. 서식 문사 "%p"를 이용해서 각 요소들의 값을 출력해보겠습니다. 그리고 배열의 이름 a의 값도 출력해볼게요.
▲ 이 프로그램의 실행 결과에서 알 수 있듯이 배열의 이름이 가리키고 있는 주소와 배열의 첫 번째 요소가 가리키고 있는 주소의 위치가 같습니다. 즉, 배열의 이름은 저장된 메모리의 첫 번째 요소의 주소값을 저장하고 있다는 걸 확인할 수 있습니다. 그리고 각 요소의 간격이 4byte인데 이는 int형 자료형의 크기가 4byte이기 때문입니다.
이처럼 배열의 이름은 그 자체가 데이터가 저장된 주솟값을 저장하고 있는 포인터인데 이 배열이 일반 포인터 변수와 다른점은 배열 이름이 가리키고 있는 메모리의 값을 변경할 수 없다는 점입니다. 즉, a는 이미 &a[0]의 주소값을 저장하고 있는데 a에 &a[1] 요소의 값을 저장하려고 하면 에러가 발생하는데요. 예제에서 확인해보겠습니다.
▲ 이렇게 해서 C언어에서 배열의 이름은 포인터 역할을 하며 그곳에 저장된 값은 배열 첫 번째 요소의 주솟값이라는 걸 알아봤구요. 배열의 이름에 저장된 값은 변경할 수 없는 상수라는 것까지 정리해봤습니다. 수고하셨어요.