이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다.
배열(array)
배열은 같은 타입의 값을 나란히 저장하며 각 항목은 배열이 놓인 위치로 접근합니다. 배열을 선언할 때에는 반드시 배열의 크기를 지정해야합니다. 배열의 크기는 변수로 지정할 수 없고 반드시 상수 표현식으로 지정해야합니다. 예를 들어 정수값을 세 개 가진 배열을 선언하려면 다음과 같이 작성합니다.
int myArray[3];
myArray[0] = 0;
myArray[1] = 0;
myArray[2] = 0;
배열을 선언한 뒤 각 원소를 0으로 초기화 했습니다. 배열의 인덱스는 0부터 시작합니다. 따라서 항상 마지막 인덱스는 배열의 크기보다 1이 작습니다.
배열을 초기화할 때 위에서 처럼 각 원소마다 일일이 초기화 하지 않고 한 번에 초기화하는 영 초기화 방법도 있습니다.
int myArray[3] = {0};
여기서 0을 생략하고 다음과 같이 써도됩니다.
int myArray[3] = {};
영 초기화 시 기본정수타입(char, int)등은 0으로, 부동소수점 타입은 0.0으로 포인터 타입은 nullptr로 초기화 됩니다.
char myArray1[3] = {}; // 0으로 초기화
float myArray2[3] = {}; // 0.0으로 초기화
int* myArray3[3] = {}; //nullptr로 초기화
또한 이니셜라이저 리스트(initializer_list)를 사용해서 초기화 하는 방법도 있습니다.
int myArray[] = {1, 2, 3, 4};
배열의 크기를 지정할 때 이니셜라이저 리스트에 나온 원소 수가 배열 개수보다 적으면 나머지 원소는 0으로 초기화됩니다.
int myArray[3] = { 2 } //나머지 원소 2개는 0으로 초기화된다.
스택 기반 C스타일 배열의 크기는 c++17부터 제공하는 std::size() 함수로 알아낼 수 있습니다.
unsigned int arraySize = std::size(myArray);
사용하는 컴파일러가 c++17을 지원하지 않는다면 sizeof() 함수를 사용한 예전 방식으로 알아낼 수도 있습니다.
unsigned int arraySize = sizeof(myArray) / sizeof(myArray[0]);
sizeof 함수는 변수의 크기를 바이트 단위로 반환합니다. myArray가 총 12바이트 이므로 sizeof(myArray)는 12를 반환하고 배열의 각 원소는 4바이트 이므로 sizeof(myArray[0])은 4를 반환합니다. 따라서 크기 3을 반환하게 됩니다.(int 타입을4바이트로 계산 시)
다음은 위 두가지 경우를 이용하여 배열의 크기를 구하는 예제입니다.
#include <iostream>
#include <array>
using namespace std;
int main()
{
int myArray1[3] = {};
unsigned int arraySize1 = size(myArray1);
cout << "myArray1 크기는 : " << arraySize1 << " 입니다." << endl;
int myArray2[5] = {};
unsigned int arraySize2 = sizeof(myArray2) / sizeof(myArray2[0]);
cout << "myArray2 크기는 : " << arraySize2 << " 입니다.";
return 0;
}
결과
c++은 일차원 배열뿐만 아니라 다차원 배열도 지원합니다. 다음 row X col 행렬을 표현하는 2차원 배열의 예입니다.
int myArray2D[row][col]
2차원 배열도 다음과 같이 영 초기화가 가능합니다.
int myArray2D[7][5] = {};
'Program Language > c++' 카테고리의 다른 글
C++ 기초(구조적 바인딩) (0) | 2023.01.09 |
---|---|
c++ 기초(c++ 스타일 배열) (0) | 2023.01.06 |
C++ 기초(함수) (0) | 2023.01.05 |
c++ 기초(논리 연산자) (0) | 2023.01.04 |
C++ 기초(조건 연산자) (0) | 2023.01.04 |
댓글