Wpis z mikrobloga

s++;


@pantera49: Inkrementacja wskaźnika s.

*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*.
@pantera49: ponieważ s++ to postinkrementacja. Wskaźnik s 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
Według priorytetów operatorów: najpierw s czyli dereferencja (...) A potem dopiero inkrementacja


@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.