Как вы можете привести двумерный массив в C? - PullRequest
8 голосов
/ 17 января 2011

Мой мозг совсем недавно стал нечетким, и я не могу на всю жизнь вспомнить, почему следующий код C:

char a[3][3] = { "123", "456", "789" };
char **b = a;

Создает следующее предупреждение:

warning: initialization from incompatible pointer type

Может кто-нибудь, пожалуйста, объясните мне это.

Спасибо.

Ответы [ 5 ]

10 голосов
/ 17 января 2011
char (*b)[3] = a;

Это объявляет b как указатель на массивы char размера 3. Обратите внимание, что это не то же самое, что char *b[3], который объявляет b как массив из 3 указателей на символы.

Также обратите внимание, что char *b = a неверно и по-прежнему выдает то же предупреждение, что и char **b = a.

1 голос
/ 17 января 2011

Попробуйте это,

   char a[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9' }};
   char *b = &a[0][0];

Поскольку, это массив символов, вам нужно инициализировать их как символы.

0 голосов
/ 17 января 2011

Это верно.a - указатель.

char *b определяет указатель на символ.

char **b определяет указатель на символ.

0 голосов
/ 17 января 2011

проблема в том, что ** статически не выделяется.

Вы можете сделать эту простую версию со следующим:

char a[3][3] = {"123", "456", "789"};
char *b[3] = {a[0], a[1], a[2]};
0 голосов
/ 17 января 2011

a по-прежнему является указателем на символ:

char* b = a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...