irnd04   5년 전

2차원 정적배열을 인자로 받을때 

아래 두가지 방법의 차이는 무엇인가요 ?

그리고 속도차이도 알고싶습니다.

궁금합니다.

bupjae   5년 전

1번의 경우처럼 배열을 함수의 인자로 넘기려 하면 type decay가 발생합니다. 간단하게 설명하면 최상위 첨자를 잃고 포인터가 됩니다. 1번의 인자의 실제 타입은 (int *)[4] 입니다.

2번의 경우는 배열의 레퍼런스를 함수의 인자로 넘기고 있습니다. 이 경우는 배열의 레퍼런스를 그대로 전달받고 type도 보존됩니다.

대부분의 C++ 구현체에서 두 경우 모두 실제로 주고받는 것은 배열의 메모리 주소 입니다. 따라서 속도 차이는 없을 가능성이 큽니다.

bupjae   5년 전

함수 내부에서 arr 값을 읽고 쓸 때는 두 경우 모두 arr[i][j] 로 동일합니다.


sizeof(arr) 의 결과는 두 함수에서 다르게 나옵니다. 대부분의 C++ 구현체에서 1번 함수의 sizeof(arr) == sizeof(void*), 2번 함수의 sizeof(arr) == sizeof(int) * Y * X 입니다.

bupjae   5년 전

처음 단 댓글에 오타가 하나 있네요. (int *)[4] 가 아니라 (int *)[X] 입니다

irnd04   5년 전

고맙습니다!!

댓글을 작성하려면 로그인해야 합니다.