2013-10-20 18 views
8

Jestem nowy w języku C, więc moje pytanie może nie spełniać wysokie standardy2d array vs struktury tablicy

możemy użyć

struct mat{ 

    int a[10]; 

};m[10]; 

zamiast

int mat[10][10]; 

whats różnica? i który jest bardziej wydajny?

+6

myślę, że różnica tutaj jest to, co jest łatwiejsze do zrozumienia. – Matthew

Odpowiedz

1

Należy zaufać kompilator z tym. Mogę jednak zasugerować 2 alternatywy, które znam dobrze działające w zależności od aplikacji.

1) użyj int a [10] [10], ale upewnij się, że uzyskujesz do nich dostęp w odpowiedniej kolejności podczas zapętlania. Kompilator „pod” wykorzystuje się pojedynczą rozmieszczonymi tak acessing aby

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

różni się pod względem wydajności. Później jest bardziej wydajny.

2) Opcja 1 wymaga dodatkowej opieki i jest sprzeczna z intuicją. Wolę robić

int a[100] 

i zrobić

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

gdzie funkcja powinna być zadeklarowana inline i preform rzeczy trzeba zrobić. Jeśli możesz uniknąć tej funkcji, jest jeszcze lepiej. Na przykład, jeśli jest to suma, posiadanie 2d lub wektor niczego nie zmienia.

EDIT: tu jest odniesienie, które wyjaśniają w szczegółach bitu o kolejności tablicy: http://www.cplusplus.com/doc/tutorial/arrays/

2

Trzeba m[x].a[y] który jest bardziej skomplikowana niż składnia m[x][y] ale nie wnosi nic leksykalnie

1

nr Jest to struktura, która zawiera tablicę.

struct mat 
{ 
    int a[10]; 
}; 

Można zdefiniować tablicę struct:

struct mat m[10]; 

zrobić to w jednym kroku:

struct mat{ 

    int a[10]; 

}m[10]; 

Zauważ, że masz dodatkowy średnik przed m [10] która nie jest poprawna składnia.

Aby uzyskać dostęp do elementu w ARR, należy użyć m[i].a[j]

To nie jest równoznaczne w składni do tablicy 2D jak:

int mat[10][10]; 

którego można uzyskać dostęp za pomocą mat[i][j]