Как передать 3D массив символов в функцию - PullRequest
2 голосов
/ 05 декабря 2011

У меня есть трехмерный массив таблицы символов [] [] [], и я хочу передать ее в функцию void, чтобы она могла вносить в нее изменения. Как я могу это сделать?

void make(char minor[][][]);

.....
char greater[20][30][50];
make(greater);

Полагаю, это не сработает.

РЕДАКТИРОВАТЬ: еще один вопрос, связанный с этим: скажем, я хочу сделать функцию копирования, чтобы скопировать строку в массив - как мне вызвать strcpy в функции?

void copy(char (*minor)[][])

{ char m[50] = "asdasdasd"; 
strcpy(minor[][],m);
}

Ответы [ 3 ]

7 голосов
/ 05 декабря 2011

Если вы хотите передать массив , такой же, как этот, в отличие от того, который вы динамически выделяли с помощью malloc (это будет несколько уровней указателей, а не реальных массивов), подойдет любой из приведенных ниже прототипов функций:

  • void make(char minor[20][30][50])
  • void make(char minor[][30][50])
  • void make(char (*minor)[30][50])

Причина, по которой вы не можете иметь что-то вроде void make(char ***minor), заключается в том, что minor будет распадаться только на указатель на массив массивов, он будет распадаться не более одного раза, так сказать.

2 голосов
/ 05 декабря 2011

Передать указатель на двумерный массив:

void make(char (*minor)[30][50]);

... 
char greater[20][30][50];
make(greater);
0 голосов
/ 05 декабря 2011

Редактировать: не очень хороший способ, смотрите комментарии!

вам нужно будет передать указатели и размер массива,

вот взгляните на этот пост Передать многомерный массив в c

...