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

Работа с указателями - C++

Восстановить пароль Регистрация
 
pasper
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 3
06.04.2011, 20:33     Работа с указателями #1
Доброго времени суток!
Прошу помощи в решении очень интересной задачи. Перепробовал все свои знания., не получается(
Чаще всего получаю: conversion from 'int' to 'float', possible loss of data

В результате неаккуратного обращения с указателями, целочислен-ное значение типа int было записано по адресу, по которому в программе располагается переменная типа float (скажем, x). Приведите фрагмент кода, который позволяет прочитать это целочисленное значение с указанного адреса. (Файл Test1.zip содержит заготовку Microsoft Visual C++ 7.0 проекта, в котором используется функция BadDllFunction (экспортируется из BadDll.dll), реализующая описанную некорректную запись некоторого целого числа по переданному адресу переменной типа float. Добавьте Ваш код вместо закомментированной строки

// i = …

в main.cpp.

Чему равно это целое число?)
Вложения
Тип файла: rar Test1.rar (3.4 Кб, 12 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2011, 20:33     Работа с указателями
Посмотрите здесь:

C++ работа с указателями
работа с указателями C++
C++ Работа с указателями
Работа с указателями C++
Работа с указателями C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 07:04     Работа с указателями #2
C++
1
2
float f = ...;
int i = *(int*)&f;
А архив качать не хочу.
pasper
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 3
07.04.2011, 07:30  [ТС]     Работа с указателями #3
Цитата Сообщение от Deviaphan Посмотреть сообщение
C++
1
2
float f = ...;
int i = *(int*)&f;
А архив качать не хочу.
А получилось!)))

А можно комментарий как происходит данное считывание? Не совсем понимаю такой оператор (int*)&f?
wolf.diesel
14 / 14 / 1
Регистрация: 04.04.2011
Сообщений: 70
07.04.2011, 07:39     Работа с указателями #4
& - операция взятия адреса переменной(если она - реальный объект, а не ссылка)
(int *) приведение указателя к типу int

* перед (int *) означает: разыменовать указатель на int.

итого это значит: взять адрес переменной f типа float и интерпретировать как int и разыменовать(взять значение).
в инт попадут старшие байты из флоат.
pasper
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 3
07.04.2011, 07:53  [ТС]     Работа с указателями #5
Цитата Сообщение от wolf.diesel Посмотреть сообщение
в инт попадут старшие байты из флоат.
Разобрался. Последняя фраза помогла. Все не мог понять как флоат превратится в инт. Спасибо.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 08:11     Работа с указателями #6
Цитата Сообщение от wolf.diesel Посмотреть сообщение
В инт попадут старшие байты из флоат.
*все байты из float, если sizeof(int)==sizeof(float). Т.е. практически наверняка все байты.
wolf.diesel
14 / 14 / 1
Регистрация: 04.04.2011
Сообщений: 70
07.04.2011, 08:18     Работа с указателями #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
*все байты из float, если sizeof(int)==sizeof(float). Т.е. практически наверняка все байты.
Этот вопрос спорен и зависит от компилятора.
В любом случае, человек интересовался куда(в какое место, при условии неравенства количества байтов размерности) укажет новый указатель int, меньший по длине. И что в итоге будет содержаться, если таковая ситуация поимеет место быть.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
07.04.2011, 08:24     Работа с указателями #8
Ну а при неравенстве всё будет определяться порядком байт. Если в младших адресах старшие байты, то они в инте и будут, а если младшие, то они. То есть это уже зависит от формата флоата, а при аппаратном формате от камня.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2011, 08:50     Работа с указателями
Еще ссылки по теме:

C++ работа с указателями
C++ Работа с указателями
Работа с указателями C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 08:50     Работа с указателями #9
Цитата Сообщение от pasper Посмотреть сообщение
В результате неаккуратного обращения с указателями
ЭТО главная проблема, а не то, куда там что указывает.)

Добавлено через 46 секунд
Цитата Сообщение от wolf.diesel Посмотреть сообщение
Этот вопрос спорен и зависит от компилятора.
Поэтому я и написал условие, когда оно да.)

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
То есть это уже зависит от формата флоата
Вот от этого совсем не зависит. Т.к. читается не float, а фактически мусор, который записался по адресу переменной типа float.
Yandex
Объявления
07.04.2011, 08:50     Работа с указателями
Ответ Создать тему
Опции темы

Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru