Форум программистов, компьютерный форум CyberForum.ru

Дереференс указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ ошибка с WINDOWS.H http://www.cyberforum.ru/cpp-beginners/thread156426.html
После подключения в одном из модулей модуля "afxwin.h" при компиляции появилась ошибка fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h> В чём ошибка? И как её устранить?
C++ Как работает алгоритм удаления дерева struct tree { Ti; tree <T> *l, *r; } void tree_remove (tree <T> *&r) { if (!r) return; tree_remove (r->l); http://www.cyberforum.ru/cpp-beginners/thread156417.html
C++ UDP Client
Привет всем! У меня тут такой вопрос возник: можно ли создать UDP Client к уже существующему серверу UDP пример: вот UDP Server MTA vc 0.1 магули я создать для него клиент ?? и чтоб мой клиент функционирывал почти ткаже как и MTA VC Client 0.1 ???????????
C++ Аварийное завершение программы
#include "B.h" #include "D1.h" #include "D2.h" #include <iostream> #include <typeinfo> using namespace std; class B {
C++ Есть ли в С++ аналог Readln(F, var1,var2,...) в Паскале? http://www.cyberforum.ru/cpp-beginners/thread156352.html
Нужно прочесть из файла значения в переменные разделенные пробелами. Как это проще сделать?
C++ Словарик/Тестер Добрый день! Необходимость параллельного с си изучения и другого языка - английского навела меня на мысль написать простой словарик - и одновременно проверщик запоминания. Привожу код на си той части которая должна записывать новые слова в словарь: #include <iostream> #include <cstdlib> using namespace std; struct word { char Eng; подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
31.07.2010, 13:36     Дереференс указателей
Цитата Сообщение от easybudda Посмотреть сообщение
вот, кстати, ещё для разнообразия
Подход с преобразованием int'а НИКОГДА не приведёт к ошибке. В разумном предположении, что нужный нам адрес (но не режим адресации на машине) укалывается в размер int'а.

Твой подход приведёт к ошибке, если размер size_t не совпадает с размером int* (чего не будет при использовании cast'а). Твой подход заведомо не будет работать на архитектурах, где преобразование целого в указатель требует дополнительных действий (например, навешивание тэгов на число на защищённых архитектурах или специфические пляски с бубнами на сигнальных процессорах), потому что в твоём случае преобразования типов нет, хотя по логике постановки задачи оно должно быть.

Ну и твой способ неверен чисто с концептуальной точки зрения: преобразование типа (cast) НЕ является операцией наложения битового представления. Преобразование от int'а к float'у - это cast. При наложении битов получится неправильный результат. float от указателя принципиально ничем не отличается - происходит преобразование значения (а не его битового представления) из одного типа в другой. Наверняка есть сигнальные процессоры, в которых твой способ ошибочно отработает даже при преобразовании int'а к unsigned'у, потому что для представления целых чисел используется кодировка не в обратном коде, а в прямом (я не силён в терминологии и не помню точно, как это называется)

Ну и краткий итог. При работе через cast выполняется преобразование типа для значения. При работе через union происходит копирование битового образа (которое ещё и неправильно отработает, если битовые размеры типов не совпадают). Если твой пример работает на i386, то это вовсе не означает, что этот пример будет корректно работать на всех архитектурах

Добавлено через 1 минуту
Цитата Сообщение от easybudda Посмотреть сообщение
Но такой подход - прямой путь к куче трудноуловимых ошибок
К слову говоря, это твой подход является путём к созданию кучи ошибок
 
Текущее время: 23:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru