1차원배열을 함수에 집어넣을땐 포인터 형식으로 집어넣잖슴. 예를들자면
void arrFunc(int* arr){
for (int i = 0; i < 4; i++){
*(arr + i) = 10;
}
return;
}
int main(){
int arr[4] = { 0,0,0,0 };
arrFunc(arr);
printf("%d\n", arr[0]);
printf("%d\n", arr[1]);
printf("%d\n", arr[2]);
printf("%d\n", arr[3]);
return 0;
}
이렇게 하면 출력은
10
10
10
10
이렇게 잘 뜬단 말이지 ㅇㅇ
그런데 다차원 배열(예를들어 2차원배열)을 함수에 집어넣으면
void arrFunc(int** arr){
for (int i = 0; i < 4; i++)
{
*(*arr + i) = 10;
}
return;
}
int main(){
int arr[2][2] = { 0,0,0,0 };
arrFunc(arr);
printf("%d\n", arr[0][0]);
printf("%d\n", arr[0][1]);
printf("%d\n", arr[1][0]);
printf("%d\n", arr[1][1]);
return 0;
}
arrFunc함수가 작동하지 않으면서 출력도 되지 않음. 근데 arrFunc() 부분을 별개의 함수로 따로 분리해놓지 않고
int main() {
int arr[2][2] = { 0,0,0,0 };
for (int i = 0; i < 4; i++)
*(*arr + i) = 10;
printf("%d\n", arr[0][0]);
printf("%d\n", arr[0][1]);
printf("%d\n", arr[1][0]);
printf("%d\n", arr[1][1]);
return 0;
}
이렇게 할 경우
10
10
10
10
출력 잘 됨.
왜 이런 문제가 생기는 거고
그렇다면 다차원배열을 함수에 집어넣을땐 어떻게 함수를 짜야하는거야??
배열포인터 검색 ㄱ
그러면 3번째는 작동하는데 2번째는 작동하지 않는 이유는 뭐임??
Soen.kr에서 배열이 포인트와 어떻게 다른지 정독
배열이 뭐고 포인터가 뭔지 설명은 나와있는데 그 차이에 대한 설명이 없는데요?
배열과 포인터 편 다 읽어 제대로 읽지도 않고 왔구만
아니 그러니까 다차원배열에선 예를들자면 arr[2][2]에서 arr[0][0]의 주소(포인터)는 arr[0]이고 arr[0]의 주소(포인터)는 arr이잖슴. 이걸 포인터 형식으로 쓰면 arr[0][0] == *(arr+0) == *(*(arr+0)+0)이거고
또한 다차원 배열에서도 주소는 비유하자면 일렬로 배정이 되니까 *(*(arr+1)+0) == *(*(arr+0)+2) 이게 성립하는 거지 ㅇㅇ 그것까진 알겠음. 이러한 이유로 3번째가 작동이 되는거고 ㅇㅇ
근데 그러면 왜 2번째는 작동 안하냐고 ㅇㅇ
그리고 Seon.kr 가보니 포인터 연산법이니 배열이 뭐니 다 나와있는데 이 둘의 차이점에 대해선 어디 나와있는거임?
일단 2번째 해결법이 뭐임? 그것만 알려주셈 저기서 차이점 어디 처박혀있는지 찾으려면 오래걸리니까