배열

Ryan Ham·2024년 5월 29일
0

C++

목록 보기
20/26

다차원 배열

다차원 배열에 대한 포인터를 선언하는 방법은 다음과 같다.

2차원 배열을 가르키는 포인터


int main(){
	int arr2D[2][3] = {
    	{1,2,3},
        {4,5,6}
    };
    
    // 2d 배열 포인터의 선언 형태
    int(*2d_ptr)[3] = arr2D;
}

3차원 배열을 가르키는 포인터


int main(){

	int arr2D[2][3][4] = 
    {
        {
            {1,2,3},
            {4,5,6},
            {7,8,9},
            {10,11,12}
        },
        {
            {1,2,3},
            {4,5,6},
            {7,8,9},
            {10,11,12}
        }
    }
    
    // 3d 배열 포인터의 선언 형태
    int(*3d_ptr)[3][4] = arr3D;
}

다차원 배열 type의 pointer를 만드는 것은 상당히 괴랄하게 느껴질 수 있겠지만, 다차원 배열에서 앞부분 차원을 하나 날린다고 생각하면 쉽게 외울 수 있다. 다차원 포인터로 배열 인덱스를 접근하는 방법은 배열의 이름으로 접근하는 것과 방법이 동일하다.


함수 parameter로 배열을 넘길때

배열을 함수의 인자로 넘기게 되면 array-to-pointer라는 decay현상이 일어나게 된다. 따라서, 배열이 넘어가는 것이 아니라 배열 중 첫 번째 원소의 메모리 주소가 넘어가게 되는 것이다. 따라서 함수 안에서 배열의 이름으로 sizeof를 찍게 되면, 배열의 총 메모리 크기가 찍히는 것이 아닌, 배열의 포인터 크기(64bit에서는 8byte)가 찍히게 된다.

#include <iostream>

using namespace std;


int SumArray(int* arr) {
	int sum = 0;

	for (int i = 0; i < sizeof(arr) / 4; i++) {
		sum += arr[i];
	}

	// 여기서 arr는 배열 포인터가 넘어왔다. 
	// 따라서 arr의 크기를 찍어보면 64 bit system에서는 8bit이다.  
	cout << "Size of an array is : " << sizeof(arr) << endl;
	cout << "Size of an element of first array is : " << sizeof(arr[0]) << endl;

	return sum;
}

void main() {

	int arr1[6] = {1,2,3,4,5};
	cout << SumArray(arr1) << endl;
	cout << "Size of an array is : " << sizeof(arr1) << endl;

}
profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글