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?
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?
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/
Trzeba m[x].a[y]
który jest bardziej skomplikowana niż składnia m[x][y]
ale nie wnosi nic leksykalnie
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]
myślę, że różnica tutaj jest to, co jest łatwiejsze do zrozumienia. – Matthew