배열

-> 동일한 특성을 가지며, 일정한 규칙에 따라 나열되어 있는 데이터 집합

동일한 특성 : 자료형

일정한 규칙 : 연속된 메모리

 

배열의 형태

자료형 변수명 [ 배열의 수]

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

+ Recent posts