![]() |
|
|
![]()
|
|
| My_Pioner |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.12.2004 Репутация: нет Всего: нет |
Здесь я хочу привести кусочек кода, а от вас, уважаемые хотелось бы услышать соображения касательно результатов выполнения этого кода. Можно к примеру рассмотреть такой чуть более сложный код: Самое интересное в этом коде то какие результаты он выдает в обоих режимах работы компилятора Visual C++.NET.
или такой чуть попроще:
Visual C++ выдает весьма интересные результаты, которые я никак не в состоянии объяснить, причем результаты слегка могут различаться для режимов отладки и реализации. Хотелось бы поинтересоваться вашими соображениями по этому поводу. Если этот факт работы компилятора кого нибудь заинтересует, я могу привести еще боллее интересные примеры. Ход рассуждений сводится в конечном итоге к тому, что в оптимизационном режиме работы компилятора для определенных операций результат предыдущих операций зависит от операций последующих. Вот пример:
Это сообщение отредактировал(а) My_Pioner - 13.12.2004, 15:39 |
||||||
|
|||||||
| NiJazz |
|
||||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 2 Всего: 23 |
Что-то с указателями там совсем наглючено. Так вот должно работать. Добавлено @ 20:34 объявить массив можно двумя способами: 1. int array[3]; 2. int* array; Во втором способе нужно выделять память, чтобы с массивом можно было работать.
|
||||
|
|||||
| My_Pioner |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.12.2004 Репутация: нет Всего: нет |
Вообщем то. в коде нет проблем относительно синтаксиса, здесь есть проблемки относительно того как этот синтаксис воспринимает компилятор 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, а совсем не адресс числа, хотя в данном случае приведена операция получения адреса. Чудеса да и только!!!
Это сообщение отредактировал(а) My_Pioner - 13.12.2004, 14:18 |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 2 Всего: 19 |
А лучше так
|
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 1 Всего: 10 |
В первом блоке кода:
создаешь массив указателей(стековый) Записываешь адреса переменных(int) в этот массив в разных editbox(ах) получаешь разные адреса переменных. В связи с разными режимами компиляции имеешь разный обьем кода и ,соответственно, разные адреса. Ничегошеньки непонятного. Во втором блоке кода просто заносишь адреса переменных в editbox(ы). Аналогично предыдущему. Третий блок кода более интересен. Компилятор складывает переменные в обратном порядке в стек.Поэтому адрес последней переменной меньше адреса первой ( Отладочный режим ). Можно было не изголятся,приводя адреса к int, они и так вычитаются по синтаксису языка( складывать нельзя) . Прибавив положительное число(sizeof int) ко второму адресу получаешь адрес первой переменной( он больше), отняв то же от первого получаешь адрес второй переменной.
Это сообщение отредактировал(а) threef - 31.10.2005, 16:27 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |