Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2014, 19:27   #1
animator-kun
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 11
По умолчанию Преобразование типов указателей

добрый день. проблема с лабами по указателям: 1) почему указатель на int при яном приведении его к типу float обнуляет переменные 2) почему изменяется адрес ячейки переменной float

Последний раз редактировалось Stilet; 28.12.2014 в 20:14.
animator-kun вне форума Ответить с цитированием
Старый 28.12.2014, 19:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что это за волшебный код? Что он должен демонстрировать деска?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2014, 19:42   #3
animator-kun
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 11
По умолчанию

Задание к работе
1. Объявить статические переменные: базовых типов, указателей на базовые типы, ссылочных типов. В качестве базовых типов использовать char, int, float. Все переменные проинициализировать в соответствии с их типом. Нарисовать картинки в памяти до и после инициализации.
2. Выполнить операции приведения типов на объявленных указателях и переменных ссылочного типа. Использовать явное и неявное приведение типов. Для демонстрации операции приведения сконструировать выражение на базе операции присваивания.
3. Определить допустимые операции, пояснить их смысл на указателях и на переменных ссылочного типа.
4. Объявить константный указатель, указатель на константу, константную ссылку, ссылку на константу. Проинициализировать всё. Привести примеры допустимых и недопустимых операций использования.
5. Объявить указатель на указатель на любой базовый тип, дать ссылку на ссылку на переменную любого базового типа. Всё проинициализировать. Проанализировать объявленные переменные. Нарисовать картинки в памяти до и после инициализации.
6. Выполнить те же действия, что в пункте 5, используя модификатор const. Использовать все возможные варианты объявлений и инициализаций. Определить допустимые операции. Привести примеры допустимых и недопустимых операций. desu
animator-kun вне форума Ответить с цитированием
Старый 28.12.2014, 20:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Иээ... Вакаримасен... Как можно такое лайно преподавать?
Ладно. Речь о вещественном. Попробую пример показать:
Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    float q=5.2;
    float* f=&q;
    int* i;
    i=(int *)f;
    printf("%f\n%i\n%f",*f,*i,*(float*)i);
    getchar();
    return 0;
}
Х.з. Как его обьяснить... Короче ты походу неверно приводил типы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2014, 20:21   #5
animator-kun
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 11
По умолчанию

не могли бы вы подробнее рассказать почему нам преподают гумно) я запомню все и расскажу в деканате хд

2) то есть не возможно преобразовать указатель на один тип к указателю на другой тип?
animator-kun вне форума Ответить с цитированием
Старый 28.12.2014, 21:06   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я запомню все и расскажу в деканате хд
Пожалуйста: *?:;(*№%;(?"№%;(?*%ПИ(СА:;Р(ЧВ*?; ВПЧ*Р();:Р(В";:Р(*В"№;*!!!!!
Так и передай мол Х?;№:№";де ноО_оО_оё
Цитата:
то есть не возможно преобразовать указатель на один тип к указателю на другой тип?
Как бы это правильнее описать... Ты когда нибудь яичницу в борщ пытался превратить? Или скажем наклеить на банку с сахаром лейбу "Соль", а потом чаем потчивать гостей? Вот тут точно такая же история с указателями. Не то чтобы нельзя, ну ты понял... ))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2014, 21:44   #7
animator-kun
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 11
По умолчанию

это шифр который можно расшифровать или просто набор символов?)

по поводу не целесобразно... но у нас же задание такое к лабораторке т___т
animator-kun вне форума Ответить с цитированием
Старый 28.12.2014, 22:29   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это шифр который можно расшифровать или просто набор символов?)
Препод поймет, не переживай.
Цитата:
но у нас же задание такое к лабораторке
Может оно конечно задания и нужно выполнять. Вот только врядли такое задание принесет тебе опыт верных решений. И дело тут не в играх с открытой памятью, а в бессмысленной попытке получить из вещественного числа целое простой ссылкой на байты. Мало того что вещественное может достигать 10-байтовой формы, так еще и формат у него отличается от вещественного.
Потому Си и делает самостоятельные приведения типов из вещественного в целое особым способом. Даже в ассемблере для этого есть специальный набор команд.
Пример: Применишь такое "преобразование" через разименовывание указателей на станке с ЧПУ и деталька на 1 миллион баксов окажется запоротой. И хорошо если не взорвется разлетевшись на кусочки, когда суппорту будет подана команда "поехать на координату 12312367515234" вместо "поехать не координату 51,25", если термисты не провтыкают внутреннее напряжение. А ведь случаи со смертельными исходами от некорректных команд в тяжелом машиностроении известны. И это так. Мелкий пример. Такое ПО ведь и ковш с плавкой разлить по цеху может пока пролетный его несет, или подать на аппарат искусственного дыхания давление в больнице.
Просто поверь. Такому учат только те, кто сам ничего не умеет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2014, 22:34   #9
animator-kun
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 11
По умолчанию

то есть я нахожу подтверждение своему убеждению что образование это лажа)
animator-kun вне форума Ответить с цитированием
Старый 28.12.2014, 22:58   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нормально типы можете кинуть, с объявлениями.

в вашем случае скорее всего адрес указателя преобразуется в нулевой float.
Цитата:
2) то есть не возможно преобразовать указатель на один тип к указателю на другой тип?
возможно, только надо твердо думать о результате

Проверил, данное значение не преобразывается в ноль, похоже на повреждение кучи.
можете весь код кинуть полный main?
и компиль какой?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 28.12.2014 в 23:05.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование типов в C++ Timer32 Помощь студентам 9 25.12.2012 10:48
преобразование типов яз СИ Танчик007 Помощь студентам 0 03.05.2011 18:57
Преобразование типов Svetlana750231 Visual C++ 3 22.04.2011 13:43
Преобразование типов FaTaL Общие вопросы .NET 5 07.03.2011 14:07
Си. Преобразование типов pif Помощь студентам 3 20.04.2009 13:54