Re: ТУпейший вопрос про указатели
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 18.07.11 12:41
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.