| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Ox, эти указатели!!! |
| Автор: My_Pioner 12.12.2004, 20:01 | ||||||
Здесь я хочу привести кусочек кода, а от вас, уважаемые хотелось бы услышать соображения касательно результатов выполнения этого кода. Можно к примеру рассмотреть такой чуть более сложный код: Самое интересное в этом коде то какие результаты он выдает в обоих режимах работы компилятора Visual C++.NET.
или такой чуть попроще:
Visual C++ выдает весьма интересные результаты, которые я никак не в состоянии объяснить, причем результаты слегка могут различаться для режимов отладки и реализации. Хотелось бы поинтересоваться вашими соображениями по этому поводу. Если этот факт работы компилятора кого нибудь заинтересует, я могу привести еще боллее интересные примеры. Ход рассуждений сводится в конечном итоге к тому, что в оптимизационном режиме работы компилятора для определенных операций результат предыдущих операций зависит от операций последующих. Вот пример:
|
| Автор: NiJazz 12.12.2004, 20:30 | ||||
Что-то с указателями там совсем наглючено. Так вот должно работать. Добавлено @ 20:34 объявить массив можно двумя способами: 1. int array[3]; 2. int* array; Во втором способе нужно выделять память, чтобы с массивом можно было работать.
|
| Автор: My_Pioner 13.12.2004, 10:26 |
| Вообщем то. в коде нет проблем относительно синтаксиса, здесь есть проблемки относительно того как этот синтаксис воспринимает компилятор Visual C++.NET да еще в режиме Release. Так (int)&int my_int_1 выдает правильный результат, то-есть значение адреса и только в том случае если m_edit_1 = (int)&int my_int_1 является первым выражением из группы выражений выводящих значения в текствое поле; если же поменять например местами m_edit_1 = (int)&int my_int_1 и m_edit_2 = (int)&int my_int_2 то в m_edit_1 помещается значение по адресу, тоесть 11, а совсем не адресс числа, хотя в данном случае приведена операция получения адреса. Чудеса да и только!!! |
| Автор: Mad 13.12.2004, 14:31 | ||
А лучше так
|
| Автор: threef 31.10.2005, 16:08 | ||
| В первом блоке кода: создаешь массив указателей(стековый) Записываешь адреса переменных(int) в этот массив в разных editbox(ах) получаешь разные адреса переменных. В связи с разными режимами компиляции имеешь разный обьем кода и ,соответственно, разные адреса. Ничегошеньки непонятного. Во втором блоке кода просто заносишь адреса переменных в editbox(ы). Аналогично предыдущему. Третий блок кода более интересен. Компилятор складывает переменные в обратном порядке в стек.Поэтому адрес последней переменной меньше адреса первой ( Отладочный режим ). Можно было не изголятся,приводя адреса к int, они и так вычитаются по синтаксису языка( складывать нельзя) . Прибавив положительное число(sizeof int) ко второму адресу получаешь адрес первой переменной( он больше), отняв то же от первого получаешь адрес второй переменной.
|