1

Я вообще не кодировал C, так что у меня трудности с указателями для 2D-массива. У меня есть 2D-массив 3x3 типа integer.Передача и возврат 2D-массивов в C

Вот мой метод, который я пытаюсь использовать:

void addMoveToBoard(int *gameArray[3][3], int a, int b, int player) { 
     *((int *)gameArray + x * 3 + y) = player; 
     if (a == 0) { 
      mvaddch(a, b, 'X'); 
     } 
    ... 
    } 

А вот мой главный:

int *board[3][3] = {{0,0,0},{0,0,0},{0,0,0}}; 
addMoveToBoard(board, 0, 0, 1); 

Первый вопрос, когда я прохожу нуля для 2-го и 3-го параметров, они не являются 0, когда я использую их в функции. При использовании mvaddch (a, b, 'X') выглядит так, как будто a и b равны 1 вместо 0. Также я правильно назначаю значение элементу в игровом массиве?

+1

'int * board [3] [3]' объявляет массив из трех массивов из трех указателей *. Я подозреваю, что это не то, что вы хотите. – WhozCraig

+0

Пожалуйста, покажите реальный код. И покажите это как [MCVE]. Ваш код ссылается на переменные, которые не определены, такие как 'x' и' y', и ваш код ссылок на вопросы, например 'mvaddch', который даже не отображается. – kaylum

ответ

2

Изменить сигнатуру функции, чтобы быть без *:

void addMoveToBoard(int gameArray[3][3], int a, int b, int player) 

теперь просто написать:

gameArray[x][y] = player; 

и в основной:

int board[3][3] = {{0,0,0},{0,0,0},{0,0,0}}; 

Остальное ОК. Важно знать, что компилятор видит вас с помощью массива и передает его как указатель на функцию. Функция получает указатель на массив доски, а компилятор «знает, что делать», когда вы индексируете его как [x][y].

+0

также для присваивания, он мог бы использовать 'gameArray [x] [y] = player;' вместо – Ludonope

+0

Обратите внимание, однако, что 'sizeof (gameArray)' в функции 'addMoveToBoard' является размером указателя, тогда как' sizeof (board) 'is' 9 * sizeof (int) ' – chqrlie

+0

Спасибо, я подумал, что это должен быть указатель, так как вы можете сказать, что я еще не знаю много C. Java - это мой основной язык, поэтому указатели - это боль для меня. – Anoml

Смежные вопросы