배열
-> 동일한 특성을 가지며, 일정한 규칙에 따라 나열되어 있는 데이터 집합
동일한 특성 : 자료형
일정한 규칙 : 연속된 메모리
배열의 형태
자료형 변수명 [ 배열의 수]
int iArr[5];
int형을 사용하는 변수 5개를 만든다는 의미.
배열의 길이
int iArr[] = {1,2,3,4,5};
cout << sizeof(iArr) / sizeof(int) << endl;
배열의 초기화
-> 다음과 같이 선언을 하게되면 5개의 변수가 모두 쓰레기 값으로 초기화가 진행된다.
int iArr[5];
배열의 초기화 방법
int iArr[5] = {}
{} 안에 명시한 값들이 순차적으로 채워진다.
int iArr[5] = { 1, 2, 3, 4, 5 };
1 > 2 > 3 > 4 > 5
만약 다음과 같이 선언 했을 경우 {} 안에 명시한 값들이 순차적으로 채워지고 뒤에 나머지 값들은 0으로 채워진다.
int iArr[5] = { 1, 2, 3 };
배열의 원소 접근
-> 변수명 [ 인덱스 ]
-> 배열 선언 시 사용한 []는 배열의 크기를 설정하는 것 (1부터시작)
-> 배열 선헌 후 사용한 []는 원소에 접근하는 것. (0부터시작)
int iArr[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; ++i)
cout << iArr[i] << endl;
배열을 사용하다보면 {1, 2, 3, 4, 5} 처럼 원소를 일일이 지정하기 귀찮을 때가 있다.
이럴 때는 for문을 활용하면 좀 더 간편하게 원소를 지정할 수가 있다.
int iArr[5] = {};
for(int i = 0; i < 5; ++i)
{
iArr[i] = i + 1;
}
배열의 크기는 상수로만 설정이 된다.
-> 변수로는 설정이 불가능하다.
이는 정적 배열을 뜻한다.
다음과 같이 입력을 통해 배열의 크기를 직접 설정하는 것은 불가능하다.
int iSize = 0;
cin >> iSize;
int iArr[iSize]; // 불가능
배열의 변수명만 출력할 경우 주소가 나온다.
-> 이 주소는 첫 번째 원소의 주소와 같다.
배열의 이름은 시작 주소를 저장하고 있다. 즉, 시작 주소를 저장하는 포인터라고 할 수 있다.
int iArr[5] = { 1, 2, 3, 4, 5 };
cout << iArr << endl;
cout << "==============================" << endl;
for (int i = 0; i < 5; ++i)
cout << &iArr[i] << endl;
포인터 연산
-> 주소를 대상으로 + 연산을 수행한다.
-> 단, 포인터 연산 시 연속 된 메모리를 사용해야만 한다.
-> 포인터 연산 시 증가 값은 자료형의 크기만큼 증가한다.
int iArr[5] = { 1, 2, 3, 4, 5 };
int* ptr = iArr;
인덱스 연산자는 *( + n)와 같은 말이다.
예)
*(ptr + 0) == iArr[0]
*(ptr + 1) == iArr[1]
*(ptr + 2) == iArr[2]
*(ptr + 3) == iArr[3]
*(ptr + 4) == iArr[4]
인덱스 연산자는 주소 값을 대상으로 포인터 연산을 수행 후 역참조를 사용한다.
cout << ptr[3] << endl;
-> 만약, 해당 연산이 성립할 경우 iArr가 할당된 공간을 잃어버리게 된다.
-> 배열의 시작 주소를 잃어버리면 배열에 접근을 할 수가 없게 된다.
-> 이를 안전하게 사용하게 하기 위해 배열의 이름은 상수 포인터로 설정되어 있다.
배열로 매개변수 선언
void Func(int* _ptest) // 포인터
void Func(int _ptest[]) // 배열
-> 포인터 형식으로 선언을 해도 배열을 참조할 수가 있다.
-> 작업을 하면서 해당 매개변수가 포인터인지 배열인지 구분을 하기위해 나눠져 있다.
'Programming > C++ Basic' 카테고리의 다른 글
C++ 문자 배열과 문자열 상수 (0) | 2020.08.28 |
---|---|
C++ 2차원 배열 (0) | 2020.08.28 |
C++ const와 포인터 (0) | 2020.08.28 |
C++ 포인터 (0) | 2020.08.26 |
C++ 재귀 함수 (0) | 2020.08.25 |