c언어 이중배열 함수매개변수 이중포인터(**)로 받는 방법

문제 코드(미로찾기)는 제 나름대로 완성시켰는데 교수님께서 올려주신 조건대로 2중배열을 이중 포인터로 받는 방법을 잘 모르겠습니다…ㅜㅜ 인터넷도 찾아봤는데 시원하게 설명되어 있는 곳이 없는 거같습니다.
어떻게 하면 되는지 알려주시면 감사하겠습니다.ㅠㅠ
첨부사진에 오류메시지 올려두겠습니다.
이해를 돕기 위해 제가 짠 코드와 문제 올려두겠습니다.

#include <stdio.h>
#define N 0
#define NE 1
#define E 2
#define SE 3
#define S 4
#define SW 5
#define W 6
#define NW 7

typedef struct _Infor {
	int x;
	int y;
}Infor;

int move(int** maze, int** mark, int row, int col, Infor* stack, int* top) {
	static int min = 999999999, count = 0;
	int R;
	for (R = 0; R < 8; R++) {
		if (stack->x == row - 2 && stack->y == col - 2 && R == 7) {
			if (min >= *top) {
				count++;
				if (min > *top) {
					count = 1;
					min = *top;
				}
			}
		}
		switch (R) {
		case N:
			if (maze[stack->x - 1][stack->y] == 0 && mark[stack->x - 1][stack->y] == 0) {
				stack->x -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case NE:
			if (maze[stack->x - 1][stack->y + 1] == 0 && mark[stack->x - 1][stack->y + 1] == 0) {
				stack->x -= 1;
				stack->y += 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case E:
			if (maze[stack->x][stack->y + 1] == 0 && mark[stack->x][stack->y + 1] == 0) {
				stack->y += 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case SE:
			if (maze[stack->x + 1][stack->y + 1] == 0 && mark[stack->x + 1][stack->y + 1] == 0) {
				stack->x += 1;
				stack->y += 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case S:
			if (maze[stack->x + 1][stack->y] == 0 && mark[stack->x + 1][stack->y] == 0) {
				stack->x += 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case SW:
			if (maze[stack->x + 1][stack->y - 1] == 0 && mark[stack->x + 1][stack->y - 1] == 0) {
				stack->x += 1;
				stack->y -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case W:
			if (maze[stack->x][stack->y - 1] == 0 && mark[stack->x][stack->y - 1] == 0) {
				stack->y -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case NW:
			if (maze[stack->x - 1][stack->y - 1] == 0 && mark[stack->x - 1][stack->y - 1] == 0) {
				stack->x -= 1;
				stack->y -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		default:
			printf("switch문 오류");
		}

	}
	return count;
}

int main() {
	Infor mamory;

	int* top;
	int num1 = 0;
	top = &num1;

	int Maze[7][7] = { {1, 1, 1, 1, 1, 1, 1},
	{1, 0, 0, 0, 0, 1, 1},
	{1, 1, 1, 0, 1, 1, 1},
	{1, 1, 0, 0, 0, 0, 1},
	{1, 1, 0, 1, 1, 1, 1},
	{1, 1, 0, 0, 0, 0, 1},
	{1, 1, 1, 1, 1, 1, 1} };

	int Mark[7][7] = { {0,0,0,0,0,0,0},
	{0,1,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0} };

	mamory.x = 1;
	mamory.y = 1;
	int solution;

	solution = move(&Maze, &Mark, 7, 7, &mamory, top);
	
	printf("%d개", solution);
}

move()함수에서 사용하는 배열을 잘 모르겠습니다.

안녕하세요.

무언가 교수님께서 착각하시고 계신거 같은데…
2차원배열은 double 포인터가 아니죠. 2차원배열은 배열의 배열이고, 더블포인터는 포인터의 포인터라
타입이 맞지않아 오류 또는 경고가 발생될겁니다.

2차원배열이 매개변수로 넘어가면 int (*)[7] 이 될것이고, 2차원 배열의 포인터의 매개변수 타입은 int (*)[7][7] 가 되겠죠? 매개변수로 넘어갈때 최고 차원이 포인터로 바뀌니까요.

main.c와 int move(int** maze, int** mark, int row, int col, Infor* stack, int* top)를 변경하지 않는게 조건인가요?

네 변경하지 않는게 조건이에요.
답변해 주신 말씀 듣고보니 교수님께서 체점하시기 편할려고 뭐 다른 방법으로 받는거 같은 느낌이 드는거 같네요.
그러면 제가 임의로 테스트 해볼려고 할려면
함수는
int move(int()[7]maze,int()[7]mark, int row, int col, Infor* stack, int* top)
이렇게하고,
main부분에선
int (*)[7][7]=Maze;
이런식으로 해야하나요?

아뇨 배열 포인터 모르세요?

int move(int(*maze)[7], ...
이렇게 선언하고요.

move(Maze, ...
이렇게 호출하면 됩니다.

대충 보자면 이렇게 되겠찌용?

#include <stdio.h>
#define N 0
#define NE 1
#define E 2
#define SE 3
#define S 4
#define SW 5
#define W 6
#define NW 7

typedef struct _Infor {
	int x;
	int y;
}Infor;

int move(int (*maze)[7], int (*mark)[7], int row, int col, Infor* stack, int* top) {
	static int min = 999999999, count = 0;
	int R;
	for (R = 0; R < 8; R++) {
		if (stack->x == row - 2 && stack->y == col - 2 && R == 7) {
			if (min >= *top) {
				count++;
				if (min > *top) {
					count = 1;
					min = *top;
				}
			}
		}
		switch (R) {
		case N:
			if (maze[stack->x - 1][stack->y] == 0 && mark[stack->x - 1][stack->y] == 0) {
				stack->x -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case NE:
			if (maze[stack->x - 1][stack->y + 1] == 0 && mark[stack->x - 1][stack->y + 1] == 0) {
				stack->x -= 1;
				stack->y += 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case E:
			if (maze[stack->x][stack->y + 1] == 0 && mark[stack->x][stack->y + 1] == 0) {
				stack->y += 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case SE:
			if (maze[stack->x + 1][stack->y + 1] == 0 && mark[stack->x + 1][stack->y + 1] == 0) {
				stack->x += 1;
				stack->y += 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case S:
			if (maze[stack->x + 1][stack->y] == 0 && mark[stack->x + 1][stack->y] == 0) {
				stack->x += 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case SW:
			if (maze[stack->x + 1][stack->y - 1] == 0 && mark[stack->x + 1][stack->y - 1] == 0) {
				stack->x += 1;
				stack->y -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case W:
			if (maze[stack->x][stack->y - 1] == 0 && mark[stack->x][stack->y - 1] == 0) {
				stack->y -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 1;
				move(maze, mark, row, col, stack, top);
			}
			break;
		case NW:
			if (maze[stack->x - 1][stack->y - 1] == 0 && mark[stack->x - 1][stack->y - 1] == 0) {
				stack->x -= 1;
				stack->y -= 1;
				mark[stack->x][stack->y] = 1;
				*top += 2;
				move(maze, mark, row, col, stack, top);
			}
			break;
		default:
			printf("switch문 오류");
		}

	}
	return count;
}

int main() {
	Infor mamory;

	int* top;
	int num1 = 0;
	top = &num1;

	int Maze[7][7] = { {1, 1, 1, 1, 1, 1, 1},
	{1, 0, 0, 0, 0, 1, 1},
	{1, 1, 1, 0, 1, 1, 1},
	{1, 1, 0, 0, 0, 0, 1},
	{1, 1, 0, 1, 1, 1, 1},
	{1, 1, 0, 0, 0, 0, 1},
	{1, 1, 1, 1, 1, 1, 1} };

	int Mark[7][7] = { {0,0,0,0,0,0,0},
	{0,1,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0} };

	mamory.x = 1;
	mamory.y = 1;
	int solution;

	solution = move(Maze, Mark, 7, 7, &mamory, top);
	
	printf("%d개", solution);
}

main에서 뭐 초기화하는거 있는줄 알았네요 ㅠㅠ
선언은 ()안에 타이핑이 안보이네요…?ㅎㅎ분명히 쳤는데…ㅎㅎ
암튼 답변 해주셔서감사합니다^^~

아이고 직접해주시다니 감하합니당(_ _)