Aktywne Wpisy
Polecam apke Too Good to Go. Za ten zestaw zapłaciłem 4£ #uk
norbert_heniu +224
Zajebiste urodziny, dzień jak co dzień czyli sam. Kończę dziś 28 lat.
Jak o tym pomyśle, że nie daleko do 30 to chce mi się tak płakać, bo w końcu nic w swoim życiu nie osiągnąłem. Kolejne w samotności, sam kompletnie. Nie mam przyjaciół, znajomych. Depresja na pełniej #!$%@? wjeżdża na banie leczona od września i w tym dwie próby samobójcze. Nikt oprócz psychologa i psychiatry nie pytał się jak się mam,
Jak o tym pomyśle, że nie daleko do 30 to chce mi się tak płakać, bo w końcu nic w swoim życiu nie osiągnąłem. Kolejne w samotności, sam kompletnie. Nie mam przyjaciół, znajomych. Depresja na pełniej #!$%@? wjeżdża na banie leczona od września i w tym dwie próby samobójcze. Nikt oprócz psychologa i psychiatry nie pytał się jak się mam,
int a[] = {2,4,10,16,7};
int *s;
s = a;
*s++;
*++s;
s++;
++s;
*s++;
albo
*++s;
najpierw inkrementujesz wskaźnik (jego adres), a później dokonujesz dereferencji na nim, tylko że nic z tą wartością nie robisz (przy kompilacji z -Wall powinieneś mieć nawet warninga na to). A dlaczego tak własnie się dzieje? Wynika to z precedencji operatorów - jak widzisz * jest w tabelce niżej niż a++ oraz ++a.
@pantera49: Inkrementacja wskaźnika s.
@pantera49: Według priorytetów operatorów: najpierw *s czyli dereferencja, zamiast wskaźnika o typie T* otrzymujesz wartość o typie T wskazywaną przez wskaźnik, tj.
int x = 2;
int * xp = &a
std::cout << *xp << std::endl;
drukuje wartość wskazywaną przez xp czyli 2.
A potem dopiero inkrementacja, ale już wyniku z poprzedniego operatora, czyli T, nie T*.
s++
to postinkrementacja. Wskaźniks
jest wtedy przesuwany, ale wartością zwracaną przez wyrażenie jest stary adres (taki, jaki był zanim nastąpiła inkrementacja). Więc 99 przypisujesz do miejsca, które jest przed wskaźnikiem:std::cout << "#1 wsk = " << *s << std::endl;
*s++=99;
std::cout << "#2 wsk = " << *(s-1) << std::endl;
Jeśli dla odmiany użyjesz preinkrementacji, to efekt będzie taki, jakiego się spodziewałeś:
std::cout << "#1
@wolodia: na odwrót. Postinkrementacja ma większą precedencję niż dereferencja, a preinkrementacja jest na tym samym poziomie, ale zasada łączności to od prawej do lewej.