2차원 배열을 사용하기 위해서 아무 생각없이 아래와 같이 사용했다가 문법 에러가 발생했다.

int func(int* parameter[]) {
	// somthing else...
}

 

위 표현과 동일한 표현은 첨자를 두 번 연달아 사용한 경우다.

int func(int parameter[][]) {
	// somthing else...
}

 

위와 같은 방식이 왜 안되는지 찾아보고 가만히 생각해보니까 안되는게 당연하다.

이유는 포인터가 주소 연산을 하기 위해선 자신이 가리키는 대상에 크기가 정해져있어야 하는데 위와 같이 쓰면 포인터가 가리키는 대상이 int[] 배열이 되므로 크기를 알 수 없다. 1차원 포인터를 예를 들면

int func(int* parameter) {
	// somthing else...
}

 

위 코드의 1차원 포인터 parameter는 자신이 가리키는 대상이 4byte라는걸 알 수 있다. 

결론적으로 2차원 배열을 매개변수로 넘기려면 크기를 명시해준다.

// 크기를 명시해주는 경우
int func(int parameter[][16]) {
	// somthing else...
}