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
의 요소들을 합친 것!)