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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pasper
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 3
#1

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

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

Доброго времени суток!
Прошу помощи в решении очень интересной задачи. Перепробовал все свои знания., не получается(
Чаще всего получаю: 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++
#include <iostream> #include <conio.h> using namespace std; void fun(int *p) { int *temp=new int; *temp=15; delete p; ...

Работа с указателями - C++
#include <iostream> #include <cstdio> #include <iomanip> using namespace std; int main() { int i;float f;long int l;double d;...

Работа с указателями - C++
Доброго времени суток, нужна помощь. Данный две задачи, обе работают правильно: Дан целочисленный массив размера N. Преобразовать...

работа с указателями - C++
Помогите решить задачу в С++ (я в этом начиющий): 1)Из положительных значений двух целочисленных массивов различной размерности...

работа с указателями - C++
#include <iostream> using namespace std; int main() { char *res=""; res="1"; res="2"; ...

Работа с указателями - C++
Написать программу работы с указателями. LONG *p1; ULONG x = 5; LONG y = -1; LONG *p2 = p1 + 50; p2 = p2 + x * y; *p2 = 1; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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++
1286 / 1220 / 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
Ушёл с форума.
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++
1. Написать функцию, принимающую в качестве параметра указатель на первый символ строки и возвращающую адрес первого символа этой же...

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


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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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     Работа с указателями
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru