본문 바로가기

C Programming

배열과 포인터

첨자 연산



  • 배열의 내부적 처리

C는 내부적으로 1차원 배열만 지원함. 2차원 이상의 다차원 배열은 1차원 배열의 확장에 불과 C에는 2차원 배열이라는 것이 없음


배열을 구성하는 배열 요소의 타입에는 전혀 제한이 없음. T형 변수를 선언할 수 있으면 T형 배열도 언제나 선언할 수 있음. 배열도 유도형 타입의 일종이며 따라서 배열 그 자체가 배열의 요소가 될 수 있음.

  • [  ] 연산자

ptr이 임의의 배열을 가리키는 포인터이고 n이 정수일 때

ptr[n] = *(ptr + n)


포인터 배열



  • 정의

포인터 배열이란 요소가 포인터형인 배열임. T형이 있을 때 T형 포인터를 선언할 수 있고 T형 배열도 선언할 수 있으므로 T형 포인터 배열도 선언할 수 있음. 예를 들어 크기 5의 정수형 포인터 배열을 선언하고 싶다면 다음과 같이 선언.


int *arpi[5];

  • 포인터 배열의 활용

배열의 선언을 자신이 원하는대로 하고 싶다면 동적메모리할당을 통해서 배열의 크기를 조절 할 수 있음.

  • 포인터와 배열

1. 우선 포인터는 변수인데 비해 배열은 상수

2. pi가 가리키는 배열의 크기는 동적으로 결정할 수 있지만 ar이 가리키는 배열의 크기는 선언할 때 정적으로 결정됨.

3. 배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없지만 포인터는 대상체가 무엇이든간에 4byte의 크기밖에 차지하지 않으므로 함수로 전달할 수 있음.

4. 배열로 요소를 읽는 것과 포인터로 대상체를 읽는 동작은 속도 차이가 있음. 대략 포인터가 배열보다 두 배 정도 빠름



배열 포인터



  • 배열 포인터

배열의 번지를 담는 포인터 변수임. 포인터가 가리키는 대상은 배열형으로 구성되어 있으며 포인터가 가리키는 배열의 요소는 임의의 타입을 가짐.


  • 배열 인수 표기법

ex)

void OutArray(int ar[5])

{

...

}

void main(void)

{

int ar[] = {1, 2, 3, 4, 5};


OutArray(ar);

}



배열과 문자열



  • 문자열 상수


  • 문자 배열 초기화

char str[] = "hello world!";

  • 문자형 포인터

char *ptr = "Hello World!";

  • 문자열 배열

문자열의 배열은 2차원 문자 배열로 표현할 수 잇음.