64.7 심사문제
, 배 준수님이 작성함수로 배열은 되는데
void transpose(int matrix[][4], int n)
포인터는 왜 안되나요?
void transpose(int (*matrix)[], int n)
회신: 64.7 심사문제
, 도장_ 관리자님이 작성int matrix[][4]는
array of array 4 of int로 읽습니다.
int (*matrix)[]는
pointer to array of int로 읽습니다.
타입이 일치하지 않습니다. pointer와 array는 주소로 해석된다는 점만 같습니다.
int (*matrix)[][4]로 선언하면
pointer to array of array 4 of int로 읽습니다.
이제 array of array 4 of int는 일치하지만, pointer to라는 간접 지정이 추가되었습니다.
배열은 값에 직접 접근하지만, 포인터는 역참조를 해야만 값에 접근할 수 있습니다.
배열은 matrix[1][1]로 접근할 수 있지만, 포인터로 바꾸면 역참조가 필요하므로 *matrix[1][1]로 접근해야 합니다.
문제에서는 함수를 호출하는 방식을 보여주고 있으므로 함수의 인자 선언이 정해져있습니다. 이를 추측해서 함수를 정의해야 합니다.
문제에서 호출하는 transpose(matrix, n); 부분도 수정이 필요합니다.
transpost(&matrix, n)으로 수정되어야 합니다.
포인터 방식으로 바꿀 수 있으나 이는 심사문제와 관계없이 전체 코드를 바꿔야 합니다.
array of array 4 of int로 읽습니다.
int (*matrix)[]는
pointer to array of int로 읽습니다.
타입이 일치하지 않습니다. pointer와 array는 주소로 해석된다는 점만 같습니다.
int (*matrix)[][4]로 선언하면
pointer to array of array 4 of int로 읽습니다.
이제 array of array 4 of int는 일치하지만, pointer to라는 간접 지정이 추가되었습니다.
배열은 값에 직접 접근하지만, 포인터는 역참조를 해야만 값에 접근할 수 있습니다.
배열은 matrix[1][1]로 접근할 수 있지만, 포인터로 바꾸면 역참조가 필요하므로 *matrix[1][1]로 접근해야 합니다.
문제에서는 함수를 호출하는 방식을 보여주고 있으므로 함수의 인자 선언이 정해져있습니다. 이를 추측해서 함수를 정의해야 합니다.
문제에서 호출하는 transpose(matrix, n); 부분도 수정이 필요합니다.
transpost(&matrix, n)으로 수정되어야 합니다.
포인터 방식으로 바꿀 수 있으나 이는 심사문제와 관계없이 전체 코드를 바꿔야 합니다.