45. 배열과 포인터 개요

질문) 같은 형식의 여러 개의 데이터를 쉽게 표현하는 방법은 없을까? 대답1) 배열을 사용해서 선언할 수 있어. int scores[10]; 처럼 원소 형식과 원소 개수를 명시하여 선언하지. C) 배열 이름은 메모리 주소를 의미하지. 포인터 상수로 취급한단다.

C언어에서는 같은 형식의 여러 데이터를 효과적으로 사용할 수 있는 배열을 제공하고 있어요.

C언어에서 제공하는 기본 형식들은 변수가 관리하는 데이터가 하나여서 변수 이름은 갖고 있는 값을 의미하죠.
하지만 배열은 관리하는 데이터가 여러 개이므로 배열 이름이 특정 값을 대표할 수 없어요.
C언어에서는 배열 이름은 관리하는 특정 값이 아닌 배열에 할당한 메모리의 시작 주소를 의미한답니다.

int a=3; int b=7; int arr[3]={1,2,3}; a는 3, b는 7, arr은? 배열 이름은 할당한 메모리의 시작 주소를 의미!

배열의 원소에 접근할 때는 배열 이름과 상대적 거리를 의미하는 인덱스 값을 사용하는 것이 일반적이예요.
예를 들어 3번째 원소를 접근하려면 시작 위치에서 거리 2이므로 인덱스 2를 사용해요.
따라서 상대적 거리를 나타낼 때 첫 번째 원소는 상대적 거리가 0이므로 n번째 원소는 상대적 거리가 n-1임을 잊지 마세요.

배열 이름은 할당한 메모리 주소를 의미! 세 번째 원소에 접근하려면 상대적 거리 2, 따라서 인덱스 2를 사용.

또한 C언어에서는 프로그램의 메모리 주소를 값으로 갖는 포인터 형식을 제공하고 있어요.

실제 개발자에게 프로그램의 메모리 주소가 얼마인지를 아는 것은 큰 의미가 없겠죠.
하지만 C언어에서는 포인터(배열 이름도 포함)를 피연산자로 하는 몇 가지 연산자들이 있어요.
이를 이용하면 포인터 변수가 갖고 있는 메모리 주소의 데이터를 얻어오거나 원하는 값으로 설정할 수 있답니다.

특히 배열 이름도 관리하는 메모리의 시작 주소를 의미하므로 프로그램에서 포인터로 취급하고 있어요.
여러분이 C언어의 배열을 효과적으로 사용하려면 배열 이름이 메모리 주소를 의미하여 포인터 취급한다는 것을 잊지 마세요.
그리고 포인터와 관련하는 연산자를 잘 알고 있어야 할 거예요.


동영상 강의

[C언어 무료 동영상 강의] 45. 배열과 포인터 개요 46. 배열 선언문