2016-02-02 13 views
6

Così mi è stata data una struct:Cosa significa questo puntatore del puntatore in una struct?

struct Xxx 
{ 
    struct Yyy{...}; 
    Yyy **yyys;    // matrix of yyys 
}; 

Sono confuso su come puntatore al puntatore è legato ad una matrice?

E come è possibile inizializzare un nuovo Yyy e un nuovo Xxx?

+0

pensare ad esso come un array bidimensionale 2. Quindi puoi creare le tue colonne con il primo puntatore e usare il secondo per le righe. – sreisman

risposta

3

Il puntatore di primo livello punta a una serie di puntatori e ogni puntatore di secondo livello punta a un array di Yyy.

Essi possono essere impostati come segue:

struct Yyy **makeMatrix(int rows, int cols) 
{ 
    int i; 
    struct Yyy **result = malloc(rows*sizeof(struct Yyy *)); 
    for (i = 0; i < rows; i++) { 
     result[i] = malloc(cols*sizeof(struct Yyy)); 
    } 
    return result; 
} 
+0

Quindi 'risultato [i] [j]' punta a yyy? E perché è possibile usare [x] [y] su un puntatore struct? – GzAndy

+0

@GzAndy No, 'risultato [i] [j]' * è * a 'Yyy'. Ogni indice di array sta dereferenziando un puntatore. – dbush

Problemi correlati