- 배열
스칼라 데이터를 더 큰 자료형으로 연계시키는 수단
C언어에서는 배열의 원소들간에 포인터를 만들고 이들 간에 연산을 할 수 있다.
A라는 배열 변수로 표현하기 위해 A[N]으로 선언하면 범위가 0에서 N-1까지인 배열이 만들어진다. 이 배열은 LN 바이트의 연속적인 공간을 메모리에 할당하고, 바이트 단위인 L은 자료형 T(char, int 등)의 크기를 나타낸다. 따라서 해당 배열이 어떤 형태의 자료로 이뤄져있나에 따라 크기가 달라진다. 그리고 새로운 식별자 A를 통해 배열이 시작하는 위치의 포인터로 사용할 수 있다. 이 포인터의 값은 x_A이고, 배열의 원소 i는 주소 (x_A)+Li에 저장된다.
- 포인터 연산
식 expr에 대해 &expr는 그 객체의 주소를 나타내는 포인터이다.
주소를 나타내는 식 Aexpr에 대해 *Aexpr는 그 주소에 위치한 값을 준다.
→ 식 expr와 *&expr는 동일하다.
예를 들어 다음과 같이 표현할 수 있다.
int i = 10; 으로 정수형 변수 i를 선언하고,
int *p = &i; 로 변수 i의 주소를 포인터 p에 대입할 수 있다.
- 다중 배열
배열의 배열을 생성할 수 있는데, 배열 할당과 참조에 관한 원칙들이 여기서도 적용된다.
예를 들어 “int A[5][3]”은 A라는 배열이 배열 5개를 원소로 가지고, 각 배열은 세 개의 정수를 저장하기 위해 12 바이트가 필요하다.
- 고정 크기 배열
C언어에서는 #define 선언을 통해 크기가 일정한 변수를 코드에 적용해서 매번 바꿀 필요 없게 할 수 있다.
- 가변 크기 배열
가변 크기 배열을 사용하기 위해서는 malloc이나 calloc 같은 함수를 사용해서 배열을 위한 저장공간을 할당해야 했고, 다차원 배열을 1차원 배열들로 행-우선 인덱싱으로 명시적으로 변환해야 했다.
하지만 C언어에서는 다음과 같이 표현할 수 있다.
A[i][j]
위와 같이 지역변수나 함수의 인자로 선언할 수 있고, 배열의 차원은 선언 부분을 만날 때 수식 i와 j를 계산해서 결정할 수 있다.