Array
특징
//1번 4개의 변수를 선언
int a, a1, a2, a3;
//2번 크기가 4인 배열을 생성
int arr_a[4];
- 배열(Array) : 인덱스와 값으로 이루어진 조합의 집합. 할당된 인덱스를 통해 값을 얻을 수 있음
- 1번처럼 선언한 경우 메모리의 무작위 공간에 4개의
int 크기의 구역이 할당된다.
- 그러나 2번처럼 선언할 경우
int * 4 크기의 구역이 할당되며, 주소가 연속적인 특성을 가진다.
- 해당 특성으로 인해
arr_a 배열에 대해 인덱스로 특정 값에 접근할 수 있게 된다.
(시작 지점에서 int 자료형 크기 * 찾고자 하는 인덱스 값만큼 떨어져 있는 값을 찾을 수 있음)
- 여러 개의 변수를 생성해야 할 때 1번 케이스처럼 이름을 각기 다르게 일일이 설정할 필요가 없어 반복적인 작업을 줄여줌
int nums[5] = {10, 20, 30, 40, 50};
int largeNum;
for(int i = 0; i < 5; i++) {
if(largeNum < nums[i]) {
largeNum = nums[i];
}
}
- 변수를 각각 선언해 이를 비교하는 과정을 일일이 작성하지 않고 배열과 반복문을 사용해 효율적인 작업을 가능하게 함
int nums[5] = {10, 20, 30, 40, 50};에서 볼 수 있듯이 선언할 때 배열의 크기를 선언해야하며 값을 추가하는 것에 따라 동적으로 크기가 변동되지 않음
Vector와의 차이점
- 인덱스를 통해 값에 접근할 수 있다는 점은 같지만
Vector는 현재 데이터의 크기와 잠재적인 크기에 관한 정보를 포함하고 있음
- 메모리 할당이 자동적으로 이루어져 크기를 동적으로 변동할 수 있음
1차원 배열
("DataType") ("ArrayName")[Size]
- 기본적인 선형적 배열로 위의 형태로 선언
- 제일 앞의
arr_a[0]의 주소를 기준으로 나머지 값들의 위치를 계산해 인덱스에 따른 값을 도출할 수 있음
char 배열
- 기본적으로
char 자료형의 1차원 배열이면서 끝났음을 표시하는 문자 \0이 마지막 인덱스에 위치한 구조
=을 통해 복사하거나 비교 연산자(==,<...)를 이용해 두 string을 비교할 수 없음
- 비교를 위해서는
strcmp()를, 복사를 위해서는 strcpy() 사용
- 이러한 불편함을 개선한 것이
string 자료형
2차원 배열
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("%d\n", matrix[1][2]);
출력
7
("DataType") ("ArrayName")[Row][Column]
- 해당 방식으로 배열을 선언하며
matrix의 경우 메모리 상에 matrix[0][0], matrix[0][1]...matrix[0][4],matrix[1][0]...matrix[3][3],matrix[3][4] 순서로 메모리를 할당받음
참조 타입
- 배열을 참조 타입으로 함수의 매개변수로 입력시 값을 복사해서 넘기는 것이 아닌 해당 배열의 메모리 주소를 넘겨주므로 함수 내에서 해당 배열을 변경할 경우 원본 배열이 같이 변동되는 특성을 가짐
주의할 점
- 배열 자체로는 배열의 크기를 알 수 없으므로 매개변수로 넘겨줄 때 해당 배열의 크기를 반드시 같이 넘겨주어야함