ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
35538 Топик полностью
Xeniya (15.07.2005 23:39, просмотров: 26) ответил rezident на И еще заметил, что при работе с локальными указателями, которые ссылаются на данные структуры, расположенной в ОЗУ, операции *p++; и *p+=1; дают разные результаты.
Так и должно быть Оператор "++" старше разъименовывания "*", а "+=" - самый младший. 1) ++ right to left 2) * left to right 3) += right to left Поэтому: *p++ тут следует достать содержимое по указателю, а затем провести инкремент указателя ("++" - оператор ПОСТинкрементации, он возвращает значения указателя ДО инкремента). Т.е. это эквивалент *(p++) *p+=1 тут следует выполнять строго по старшинству операций: сначала достать значение, а затем произвести его (значения) инкремент. Это эквивалент (*p)++ Судя по вашему посту, все произошло строго с правилами языка C. Компилятор не виноват, он сделал всё, как полагается правилами языка. Совет: если не плохо разбираетесь в правилах порядка исполнения операторов - пользуйтесь скобками. Это не приведет к усложнению кода и облегчит вам понимание.