Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 3
1

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

06.04.2011, 20:33. Показов 999. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Прошу помощи в решении очень интересной задачи. Перепробовал все свои знания., не получается(
Чаще всего получаю: 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 Кб, 13 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2011, 20:33
Ответы с готовыми решениями:

Работа с указателями
Здравствуйте Не понимаю, почему в следующем коде #include <iostream> using namespace...

Работа с указателями
Написать программу, в которой выполнить следующие действия: 1) Описать указатели на все известные...

работа с указателями
небольшая проблемка, никак не могу разобраться с указателями. Я так понял что создавая массив лучше...

Работа с указателями
Всем здравия. Нужна ваша помощь. Есть задание по С++. К сожалению работала в основном по С# да и с...

8
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 07:04 2
C++
1
2
float f = ...;
int i = *(int*)&f;
А архив качать не хочу.
1
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?
0
14 / 14 / 1
Регистрация: 04.04.2011
Сообщений: 70
07.04.2011, 07:39 4
& - операция взятия адреса переменной(если она - реальный объект, а не ссылка)
(int *) приведение указателя к типу int

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

итого это значит: взять адрес переменной f типа float и интерпретировать как int и разыменовать(взять значение).
в инт попадут старшие байты из флоат.
1
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 3
07.04.2011, 07:53  [ТС] 5
Цитата Сообщение от wolf.diesel Посмотреть сообщение
в инт попадут старшие байты из флоат.
Разобрался. Последняя фраза помогла. Все не мог понять как флоат превратится в инт. Спасибо.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 08:11 6
Цитата Сообщение от wolf.diesel Посмотреть сообщение
В инт попадут старшие байты из флоат.
*все байты из float, если sizeof(int)==sizeof(float). Т.е. практически наверняка все байты.
0
14 / 14 / 1
Регистрация: 04.04.2011
Сообщений: 70
07.04.2011, 08:18 7
Цитата Сообщение от Deviaphan Посмотреть сообщение
*все байты из float, если sizeof(int)==sizeof(float). Т.е. практически наверняка все байты.
Этот вопрос спорен и зависит от компилятора.
В любом случае, человек интересовался куда(в какое место, при условии неравенства количества байтов размерности) укажет новый указатель int, меньший по длине. И что в итоге будет содержаться, если таковая ситуация поимеет место быть.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.04.2011, 08:24 8
Ну а при неравенстве всё будет определяться порядком байт. Если в младших адресах старшие байты, то они в инте и будут, а если младшие, то они. То есть это уже зависит от формата флоата, а при аппаратном формате от камня.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 08:50 9
Цитата Сообщение от pasper Посмотреть сообщение
В результате неаккуратного обращения с указателями
ЭТО главная проблема, а не то, куда там что указывает.)

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

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
То есть это уже зависит от формата флоата
Вот от этого совсем не зависит. Т.к. читается не float, а фактически мусор, который записался по адресу переменной типа float.
0
07.04.2011, 08:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2011, 08:50
Помогаю со студенческими работами здесь

Работа с указателями
Здравствуйте! Есть массив созданный ГСС. Надо написать функция которая вычисляет сколько в нем...

Работа с указателями
Нужно чтобы при каждом попадании "1", в введенной строке выводилось сообщение на экран. ...

работа с указателями в
Всем приятного дня, друзья, вынужден просить вас помощи в написании следующей задачи: Присвоить...

Работа с указателями
1. Написать функцию, принимающую в качестве параметра указатель на первый символ строки и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru