Zacząłem czytać kilka artykułów na temat wskaźników w C i mam jeden przykład, którego nie rozumiem.O wskaźnikach w C
Przykładem jest tutaj: http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays
Oto ona:
Spójrzmy na nieco inny problem. Chcemy mieć tablicę dwuwymiarową, ale nie musimy mieć wszystkich wierszy tej samej długości. To, co robimy, to deklaracja szeregu wskaźników. Druga linia poniżej deklaruje A jako tablicę wskaźników. Każdy wskaźnik wskazuje na pływak. Oto niektóre stosowane Kod:
float linearA[30];
float *A[6];
A[0] = linearA; /* 5 - 0 = 5 elements in row */
A[1] = linearA + 5; /* 11 - 5 = 6 elements in row */
A[2] = linearA + 11; /* 15 - 11 = 4 elements in row */
A[3] = linearA + 15; /* 21 - 15 = 6 elements */
A[4] = linearA + 21; /* 25 - 21 = 4 elements */
A[5] = linearA + 25; /* 30 - 25 = 5 elements */
A[3][2] = 3.66; /* assigns 3.66 to linearA[17]; */
A[3][-3] = 1.44; /* refers to linearA[12];
negative indices are sometimes useful.
But avoid using them as much as possible. */
Moje pytanie brzmi dlaczego A[0]
jest wskaźnikiem tylko do pięciu elementów, a nie do wszystkich linearA
, ponieważ nazwa tablicy jest wskaźnikiem do jej pierwszego elementu.
I A[1] = linearA + 5;
to 6 elementów z rzędu - z tego samego powodu? Czy numer A[1]
nie ma być wskaźnikiem dla 6. członka linearA
?
Czy ktoś może wyjaśnić, gdzie jest mój błąd?
Jest to zamierzone użycie, że 'A [0]' należy przyjąć jako wskaźnik do pierwszego elementu tablicy pięciu 'float'ów. Możesz także użyć go jako wskaźnika do pierwszego elementu tablicy 30 'float's, ponieważ to zapewnia' linearA'. To wszystko tylko interpretacja. –
Wskaźniki nie mają informacji o * liczbie elementów *, do których prowadzą. Wskaźnik do pierwszego elementu tablicy o rozmiarze 42 jest dokładnie taki sam, jak dla * liczby elementów * tego, na co wskazują, jako wskaźnik do pierwszego elementu tablicy o rozmiarze 12000. W twoim przykładzie 'A [0] 'jest wskaźnikiem do pierwszego elementu tablicy złożonej z 30 elementów ... ale nie dba o * liczbę elementów *. Programista interpretuje go jako * 5 elementów * przed wykonaniem innych zadań. – pmg
@pmg: * Typ * wskaźnika wskazuje rozmiar (i inne informacje) tego, co wskazuje. Informacje te zwykle nie są przechowywane w czasie wykonywania. –