본문 바로가기

C++ 자료구조

[c++] 배열

[배열 (array) ]

같은 종류의 데이터들이 순차적으로 메모리에 저장되는 자료 구조이다.

 

 

배열은 정해진 메모리를 받아서 그 메모리들을 이어 만든 것이기 때문에 배열을 선언할 때에는 변하지 않는 값 즉 상수로 배열의 크기를 선언해야한다.

void main()
{
      int arr1[2]; // 가능

      int n = 2;
      int arr2[n]; // 불가능

      const int cn = 2;
      int arr3[cn] // 가능
}

 

 

[배열의 초기화]

void main()
{
	int arr1[8] = {1}; // arr1[0] = 1이고 나머지는 0으로 초기화
    
	int arr2[8] = {1, }; // arr1과 같음
    
	int arr3[8] = {0}; // 배열 요소를 모두 0으로 초기화
    
	int arr4[8] = {}; // arr3과 같음
    
	int arr5[8] = {1, 2, 3}; // arr5[0], arr5[1], arr5[2]만 1, 2, 3으로 초기화 되고 나머지는 0으로 초기화
    
	int arr6[8] = {1, 2, 3, }; // arr5와 같음
    
	int arr7[8]; // 배열 요소에 가비지 값이 들어감
}

 

 

[포인터로서의 배열명]

arr이라는 배열의 이름이 이미 배열의 첫 번째 값의 주소를 담고 있기 때문에 포인터는 배열의 첫 번째 값의 주소를 담게 된다.

 

[배열 인자]

 

main에서 a를 func 함수에 매개변수로 넘겨 주더라도 값 복사가 일어나기 때문에 a의 값을 직접적으론 바꿀 수 없다.

즉 a와 arg는 다른 메모리에 있기 때문에 a와 arg는 아무런 관련이 없다.

 

첫 번째는 arg++이 출력 되기 때문에 2가 출력된다.

그 후에 값이 바뀌지 않은 a가 1로 출력된다.

 

 

 

 

 

 

 

 

 


 

 

배열의 이름은 첫 번째 배열의 값의 주소를 가지고 있기 때문에 배열을 넘겨주면 주소를 넘겨주기 때문에 배열의 값을 바꿀 수 있다.

 

따라서 첫 번째는 arg[0]++이 된 값인 2가 출력된다.

주소를 넘겨줌으로써 arr[0]의 값이 바뀌었기 때문에 두 번째도 바뀐 값인 2가 출력된다.

 

 

 

 

 

 

 

 


 

[2차원 배열]

배열 요소들이 2차원으로 나열된 배열이다.

 

 

[2차원 배열 초기화 및 출력]

int main()
{
	int data[2][2] = {{0}}; // 2차원 배열을 모두 0으로 초기화
    
    int data[2][2] = {{1}}; // data[0][0]만 1로 초기화 하고 나머지는 0으로 초기화
    
    -------------------------------------------
    
    for (int i = 0; i < 2; i++)
    	for (int j = 0; j < 2; j++)
        	cout << int data[i][j];
            
    // i는 배열의 행, j는 배열의 열을 의미한다.
}

 

 

행은 2차원 배열의 첫 번째 []

열은 2차원 배열의 두 번째 []

 

 

 

 

 

'C++ 자료구조' 카테고리의 다른 글

[c++] 클래스 (Class)  (0) 2024.04.01
[c++] vector  (0) 2024.03.26
[c++] 제어 구조와 함수  (0) 2024.03.19
[c++] 문자열(string)  (0) 2024.03.12
[c++] c++의 기본 개념  (0) 2024.03.05