습관처럼

매개변수 - 2차원 배열 본문

Language/C++

매개변수 - 2차원 배열

dev.wookii 2020. 1. 28. 14:13

N차원 배열 매개변수

 

설명을 간단히 해드리겠습니다.

일반적으로 일차원 어레이를 반환할 때는 다음과 같이 진행합니다.


void print(int a[10]){
	//bla~~~bla!!
}
int main(){
	int k[10];
    memset(k,1,sizeof(k));
    print(k);
}

2차원 배열도 다음과 같습니다 하지만 '[]'를 한번더 추가해준다 라고 생각을 해주시면 편합니다.

2차원 배열의 형태를 그대로 유지하면서 첫 번째 항목만 숫자를 적지 않고 [ ][숫자]의 형태로 배열을 넘겨받아서 그대로 사용하면 됩니다.

 


void print(int a[][10]){
	//bla~~~bla!!
}
int main(){
	int k[10][10];
    memset(k,1,sizeof(k));
    print(k);
}

 

void Print(char (*str_temp2)[16], int cnt)
{
    // print
    for (int i = 0; i < cnt; i++){
        printf("%s\n", *(str_temp2 + i));
    }
}

int main()
{
    // 문자열을 저장하는 2차원 배열 
    char str_temp[[3][16] = { "apple", "software", "new" };
    Print(str_temp, 3);
    return 0;
}

하지만 이렇게 포인터 표기법으로 받으면 배열의 각 항목을 사용할 때 연산자 우선순위를 맞추기 위해서 괄호가 많이 사용됩니다. 예를 들어, 두 번째 항목으로 저장된 'software' 문자열의 'f' 문자에 접근하려면 아래와 같이 포인터를 구성해야 합니다.

 

void Print(char (*str_temp2)[10], int cnt)
{
    // 두 번째 문자열의 세 번째 위치에 있는 't' 문자를 temp 변수에 대입!
    char temp = (*(str_temp2 + 1))[2];
}

//하지만 이런 경우 일반 포인터 보다 더 어려운 표현이 되기 때문에 
//아래와 같이 포인터 표기를  배열로 해주는 것이 좀 더 좋습니다. 

void Print(char (*str_temp2)[10], int cnt)
{
    
    char temp = str_temp2[1][2];
}

//Print함수에 사용된 char (*str_temp2)[10] 어렵기 때문에 아래와 같이 
//이 표현을 단순하게 적을 수 있도록 매개 변수에 한해서 char str_temp2[][10] 과 같은 표기를 추가로 제공합니다.

void Print(char str_temp2[][10], int cnt)
{
    
    char temp = str_temp2[1][2];
}

그렇다면 3차원 배열은 어떤 방식으로 받게 될까요??

상상하시는 그대로 입니다. '[][n][m]' 으로 넘겨 주면 됩니다. 

 

Funny C++ :)