/ C, PROGRAMMING, DATASTRUCTURE

C언어: 배열 (Array)

기본 용법

int array[N];

초기화 리스트

int array[]={2,4,5,6} // (초기화 리스트 작성 시, index number는 비워도 됨)
int array[10]={0} // (나머지 초기화 리스트는 자동으로 0으로 채워짐)

배열을 이용한 문자열 표현

ex)

char string[]="Good Morning!"; // 문장의 끝에 특수문자 \0 삽입됨

'\0' (널 문자) : ASCII 코드 0

즉 문자열로 배열을 초기화할 경우, 배열의 길이는 보이는 글자보다 1*자료형(char의 경우 1)만큼 길다.

배열의 마지막에 널 문자가 존재해야만 C언어에서 문자열로 취급된다.

다차원 배열 parameter

첫번째 차원을 제외하면 길이를 명시해야만 한다!

int function(arr[][LEN]);

첫번째 차원에도 길이를 명시할 수 있지만, 컴파일러는 무시한다.

C99 가변 길이 배열 parameter

n = 배열의 길이;
func(int n,int a[n]);

과 같이 작성

(순서 주의) 이 순서를 지켜야 길이 변수 n을 argument로 전달 가능하다.

길이를 argument로 전달함으로써 함수 내의 반복문 등을 제어 가능하다.

주의사항: 상수 배열은 크기를 명시할 수 없다.

C99 static 요소

함수 정의 시, parameter에 static 접두사 추가 가능

예시)

int func(int a[static 3], int n)

-> 배열의 최소 길이가 3임을 명시

주의) 다차원 배열에서는 첫번째 요소에만 사용 가능

C99 Compound Literals

함수 호출 시의 argument로 compound literals를 사용 가능하다.

예시)

func((int []){1,2,3,4,5}, int 5)

배열의 초기화와 동일한 방식으로 작성 가능하다.


배열에 참조 연산자 &을 붙이면…

가리키는 주소는 배열 자체를 사용할 때와 같다. (arr == &arr)

그러나 배열 자체가 아닌 배열의 포인터가 평가된다는 점에서 의미상 차이가 있다.

C99 ~ Designated Initializers

int arr[100] = {[2]=29,[36]=27};

Multidimensional 배열의 size

예)

2차원 배열 int arr[5][5] 가 있을 시 sizeof arr[0] 의 값 : 20 (row 0의 요소들을 합친 것!)