2011-01-17 16 views
8

Il mio cervello è andato molto sfocata solo di recente e non posso per la vita di me ricordare perché il seguente codice C:Come si può lanciare un array bidimensionale in C?

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

genera il seguente avviso:

warning: initialization from incompatible pointer type 

Qualcuno potrebbe spiegami questo per me

Grazie.

+2

Si prega di notare che "123" nella dichiarazione non è più una stringa perché hai troncato \ 0. "123" come stringa contiene 4 caratteri, non 3. – DReJ

risposta

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

Questo dichiara b come un puntatore a char array di dimensione 3. Si noti che questa non è la stessa char *b[3], che dichiara b come un array di 3 puntatori char.

Si noti inoltre che char *b = a è errato e continua a emettere lo stesso avviso di char **b = a.

+0

+1: risposta più utile finora. –

-1

a è ancora un puntatore ad un char:

char* b = a; 
+0

Sì, è così. Ovviamente è troppo tardi di notte per essere codificato. – stretchkiwi

+0

Grazie per la risposta. – stretchkiwi

+5

Questo non è corretto. 'a' decade in un puntatore al suo primo elemento; 'a' è una matrice di' char [3] '; un puntatore al suo primo elemento ha tipo 'char (*) [3]' not 'char *'. Questa inizializzazione del puntatore genera esattamente lo stesso avviso di tipo puntatore incompatibile del codice originale. –

0

che è giusto. a è un puntatore.

char *b definisce un puntatore al carattere.

char **b definisce un puntatore al puntatore al carattere.

+1

'a' non è un puntatore; 'a' è un array. Una dichiarazione non qualificata che dice che 'a' è un puntatore non è corretto. –

+0

Ok. Per essere precisi, hai ragione. – NoviceCai

0

il problema è che ** non è allocato staticamente.

si potrebbe realizzare questa versione semplice con il seguente:

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

Prova questa,

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

Dal, un array di caratteri è di array è necessario inizializzare loro come un personaggio.

Problemi correlati