습관처럼
매개변수 - 2차원 배열 본문
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++ :)
'Language > C++' 카테고리의 다른 글
C++ - 입출력 효율성 증가시키는 방법 (0) | 2020.03.30 |
---|---|
소수 구하기 (에라토스테네스의 체) (0) | 2020.03.19 |
C++ - Array Size (0) | 2020.03.04 |
C++ - 범위 기반 for문 (feat: range based for statement) (0) | 2020.03.04 |
C++ - Compare(feat: sorting, algorithm) (0) | 2020.03.04 |