2013-10-20 14 views
8

I C-Sprache neu bin, so meine Frage entsprechen, können nicht hohe Standards2d Array vs Struktur eines Arrays

können wir verwenden

struct mat{ 

    int a[10]; 

};m[10]; 

statt

int mat[10][10]; 

was ist der Unterschied? und die effizienter ist?

+6

Ich denke, der Unterschied hier ist, was ist leichter zu verstehen. – Matthew

Antwort

1

Sie vertrauen sollen zugreifen können der Compiler damit. Jedoch kann ich zwei Alternativen vorschlagen, dass ich gut funktioniert je nach Anwendung kennen.

1) verwenden int a [10] [10], aber stellen Sie sicher, dass Sie sie in der richtigen Reihenfolge zugreifen, wenn Looping. Der Compiler wird "unter" verwenden, um ein einziges Array-Struktur, um so acessing

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] 
    } 
    } 

unterscheidet sich in Bezug auf die Leistung. Der spätere ist leistungsfähiger.

2) Die Option 1 erfordert zusätzliche Pflege und ist kontraintuitiv. Ich viel lieber

int a[100] 

und tun

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

zu tun, wo die Funktion inline deklariert werden sollte, und die Vorform das, was Sie getan haben müssen. Wenn Sie die Funktion vermeiden können, ist es noch besser. Zum Beispiel, wenn es sich um eine Summe ist, ist es 2d oder Vektor mit nichts ändern.

EDIT: Hier ist eine Referenz, die in den Details, die etwas über das Array, um zu erklären: http://www.cplusplus.com/doc/tutorial/arrays/

2

würden Sie m[x].a[y] haben, die als m[x][y] kompliziertere Syntax ist aber nichts fügt lexikalisch

1

No. Dies ist eine Struktur, die ein Array enthält.

struct mat 
{ 
    int a[10]; 
}; 

Sie können ein Array von struct definieren:

struct mat m[10]; 

Um es in einem Schritt zu tun:

struct mat{ 

    int a[10]; 

}m[10]; 

Beachten Sie, dass Sie haben eine zusätzliche Semikolon vor m [10] Das ist nicht die richtige Syntax.

Um ein Element in arr zugreifen zu können, verwenden m[i].a[j]

Das ist wie in der Syntax einen 2D-Array ist nicht äquivalent:

int mat[10][10]; 

, die Sie mit mat[i][j]

Verwandte Themen