2011-01-17 16 views
8

Mi cerebro ha ido mucho más difusa hace poco y no puedo para la vida de mí recordar por qué el siguiente código C:¿Cómo se puede lanzar una matriz bidimensional en C?

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

genera la advertencia siguiente:

warning: initialization from incompatible pointer type 

Podría alguien por favor explica esto por mi

Gracias.

+2

Tenga en cuenta que "123" en su declaración ya no es una cadena porque ha truncado \ 0. "123" como cadena contiene 4 caracteres, no 3. – DReJ

Respuesta

10
char (*b)[3] = a; 

Esto declara b como un puntero a char arrays de tamaño 3. Tenga en cuenta que esto no es lo mismo que char *b[3], que declara b como una matriz de 3 punteros de carbonilla.

También tenga en cuenta que char *b = a es incorrecto y todavía emite la misma advertencia que char **b = a.

+0

+1: La respuesta más útil hasta el momento. –

-1

a sigue siendo un puntero a un char:

char* b = a; 
+0

Sí, eso es todo. Obviamente es demasiado tarde en la noche para que yo pueda codificar. – stretchkiwi

+0

Gracias por su respuesta. – stretchkiwi

+5

Esto no es correcto. 'a' se descompone en un puntero a su primer elemento; 'a' es una matriz de' char [3] '; un puntero a su primer elemento tiene el tipo 'char (*) [3]' not 'char *'. Esta inicialización del puntero genera exactamente la misma advertencia de tipo de puntero incompatible que el código original. –

0

Eso es correcto. a es un puntero.

char *b define un puntero a char.

char **b define un puntero a puntero a char.

+1

'a' no es un puntero; 'a' es una matriz. Una afirmación no calificada que diga que 'a' es un puntero no es correcta. –

+0

Ok. Para ser precisos, tienes razón. – NoviceCai

0

el problema es que ** no está asignado estáticamente.

que podría lograr esta versión simple con lo siguiente:

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

probar esto,

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

Dado que, una matriz de caracteres es de matrices que necesita para inicializar como un personaje.

Cuestiones relacionadas