Здравствуйте, Nortsx, Вы писали:
N>После выполнения указаных действий c равно значению а, а d — указывают на пустую область памяти. Почему?
char a = 'a';
char b = 'b';
char c;
char d;
char e;
char* ptr = &a;
c = *ptr++; // выражение ptr++ - это пост-инкремент. Поэтому *(ptr++) даст 'a'.
d = *ptr--; // здесь уже ptr указывает на то, что лежало в стеке до того, как в стек была помещена переменная a
// (на x86 стек растет в сторону меньших адресов). Т.к. ptr-- тоже пост-инкремент, то
// d будет указывать как раз таки на то самое, что было "положено" в стек, до появления переменной a.
Вообще пост-инкремент (и пре-инкремент) очень коварный. Рекомендую почитать про точки следования (C++ sequence point). Например,
вот здесь.
Programs must be written for people to read, and only incidentally for machines to execute