Эта декларация
char (*table)[c][r];
не объявляете массив. Он объявляет указатель на объект типа char[c][r]
. Кстати, почему нет? :)
char[r][c]
^^^^^
Таким образом, перед использованием этого указателя он должен быть правильно инициализирован.
В этом объявлении функции
void build_field(char *table ,int tamanhox, int tamanhoy);
первый параметр имеет тип char *
. Типы char (*)[c][r]
и тип char *
- это разные несовместимые типы.
Вы можете написать объявление функции, например, следующий вид
void build_field(int tamanhox, int tamanhoy, char (*table)[tamanhox][tamanhoy]);
Но внутри этой функции вы должны разыменования указателя. Например,
(*tablw)[I][j]
Точное объявление параметра зависит от того, как инициализируется указатель и что вы собираетесь делать. Может быть, вы имеете в виду следующие объявления
char (*table)[r];
и
void build_field(int tamanhox, int tamanhoy, char (*table)[tamanhoy]);
Компилятор выдает ошибку, так как параметр функции table
имеет тип символ *. Таким образом, table[I]
является скалярным объектом типа char
.Hense вы можете не применять к нему индексного оператора, например, table[I][x]
. И кроме того, это выражение
table[tamanhoy][tamanhox]
^^^^^^^^ ^^^^^^^^^
ни в коем случае не имеет смысла, потому что, по крайней мере, вы должны написать
table[i][x]
^^^^^^
Если вы готовы взять на себя определенную схему памяти под вы можете передать таблицу как ' символ ** '. В противном случае вам нужно создать собственное представление матрицы на плоском пространстве памяти 'char *' и использовать это. Существует множество хороших библиотек C-матрицы. – David
@David: 'char **' не является многомерным массивом, не может представлять один или указывать на один! Это совершенно другая структура данных. Тип OP может быть легко передан функции. И решение очевидно. – Olaf
@Olaf: Да, это разные структуры данных. Но если вы предполагаете определенный макет памяти, вы абсолютно можете использовать char ** для индексации в многомерный массив. Это, по-видимому, плохая форма, но иногда вы не можете обойти ее. Я вижу, вы жаловались на эту технику в ссылке, которую я собираюсь опубликовать, так что, думаю, мы просто не согласны. http://stackoverflow.com/questions/2565039/how-are-multi-dimensional-arrays-formatted-in-memory – David