*(temp + count) = *(foo + i);
Operatory +
wykonują arytmetykę wskaźnika. Dodanie liczby całkowitej do wartości wskaźnika powoduje, że nowy wskaźnik inkrementował określoną liczbę obiektów poza oryginalny wskaźnik. Na przykład, jeśli p
jest wskaźnikiem do arr[0]
, wówczas p+2
wskazuje na arr[2]
.
Wynikający z tego wynikowy wskaźnik, podając obiekt, na który wskazuje.
W rzeczywistości operator indeksowania tablicy []
jest zdefiniowany w kategoriach arytmetyki wskaźników, tak aby A[i]
oznacza *(A+i)
(ignorowanie przeciążenia operatora). Więc powyższej linii kodu:
*(temp + count) = *(foo + i);
można także zapisać (jaśniej IMHO) jako:
temp[count] = foo[i];
Czasami warto przeczytać comp.lang.c FAQ, zwłaszcza rozdziały 4 (wskaźniki) i 6 (tablice i wskaźniki). Większość informacji dotyczy również języka C++.
Jednak interfejs, C++ zapewnia interfejsy biblioteki wyższego poziomu, które mogą być bardziej niezawodne niż odpowiedniki C niskiego poziomu. W C++ rzadko jest pisanie kodu, który zajmuje się bezpośrednio tablicami i wskaźnikami do elementów tablicy, chyba że jest to kod bardzo niskiego poziomu i wydajność jest krytyczna i/lub masz do czynienia ze strukturami danych z kodu C.
Nie mogę uwierzyć, że nie mamy odpowiedniego duplikatu tego pytania. –
To jest całkiem dobre pierwsze pytanie, ale zredagowałem wiele obcojęzycznych słów. Niepotrzebne * informacje *, zgodnie z oryginalną linią "przepraszam za wszelkie informacje"; w szczególności zaczynałeś od stwierdzenia, że nie masz pewności co do * konkretnej linii * w programie, ale bez twoich "dodatkowych" informacji, nie byłoby żadnego wskazania, * która * linia cię pomyliła! –
Jest to alternatywna składnia do indeksowania tablic. –