2013-10-20 10 views
8

Sono nuovo di linguaggio C, quindi la mia domanda non può soddisfare elevati standard2d serie contro la struttura di un array

possiamo usare

struct mat{ 

    int a[10]; 

};m[10]; 

invece di

int mat[10][10]; 

che cosa è il differenza? e quale è più efficiente?

+6

penso che la differenza qui è ciò che è più facile da capire. – Matthew

risposta

1

Si dovrebbe fidare il compilatore con quello. Tuttavia, potrei suggerire 2 alternative che so funzionare bene a seconda dell'applicazione.

1) usa int a [10] [10] ma assicurati di accedervi nell'ordine corretto durante il ciclo. Il compilatore "sotto" utilizzare un'unica struttura matrice così acessing per

for(i = 0 ; i < 10 ; i++) { 
    for (j = 0 ; j < 10 ; j++) { 
     // do something with a[i][j] 
    } 
    } 

vs

for(i = 0 ; i < 10 ; i++) { 
    for (j = 0 ; j < 10 ; j++) { 
     // do something with a[j][i] 
    } 
    } 

è diversa in termini di prestazioni. Più tardi è più performante.

2) L'opzione 1 richiede maggiore attenzione ed è contro-intuitiva. Preferisco di gran lunga fare

int a[100] 

e fare

for(i = 0 ; i < 100 ; i++) 
     inline_function(a[i]); 

in cui la funzione deve essere dichiarata in linea e preforme la cosa che devi aver fatto. Se puoi evitare la funzione, è ancora meglio. Ad esempio, se è una somma, averla 2d o vector non cambia nulla.

EDIT: qui è un riferimento che spiegano nei dettagli la punta circa l'ordine di matrice: http://www.cplusplus.com/doc/tutorial/arrays/

2

Si dovrebbe m[x].a[y] che è la sintassi più complicato di m[x][y], ma non aggiunge nulla lessicalmente

1

No. Si tratta di una struttura che contiene una matrice.

struct mat 
{ 
    int a[10]; 
}; 

È possibile definire una serie di struct:

struct mat m[10]; 

di farlo in un solo passo:

struct mat{ 

    int a[10]; 

}m[10]; 

noti che si dispone di un in più virgola prima di m [10] che non è la sintassi corretta.

Per accedere a un elemento in arr, si utilizza m[i].a[j]

Questo non è equivalente in sintassi per una matrice 2D come:

int mat[10][10]; 

cui è possibile accedere utilizzando mat[i][j]