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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2009, 21:41   #1
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию memcpy: Копируем double по половинкам

Доброго времени суток
Скажите, почему такой код работает:

Код:
    double x=1.5;
    void *k1=new char[8];
    memcpy(k1,&x,8);
    printf(": %f\n",*((double*)(k1)));
а такой - нет:

Код:
    double x=1.5;
    void *k1=new char[8];
    memcpy(k1,&x,4);
    memcpy(k1+4,&x+4,4);
    printf(": %f\n",*((double*)(k1)));

Последний раз редактировалось Роман Радер; 10.11.2009 в 22:04.
Роман Радер вне форума Ответить с цитированием
Старый 10.11.2009, 23:11   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Я так подозреваю, что не работает потому что &x - это double*, а арифметика указателей устроена так, что прибавляется не n байт, а размер элемента * n. В данном случае будет смещение не на 4 байта, а на 4*sizeof(double)
Попробуй через приведение к char*:
Код:
    double x=1.5;
    void *k1=new char[8];
    memcpy(k1,&x,4);
    memcpy(k1+4,(char*)&x+4,4);
И я не уверен, что k1+4 скомпилится, учитывая что k1 - void*. Компилятор по идее должен ругаться, что не знает на сколько указатель увеличить/не знает размер элемента. Да и зачем это надо, если char *k1 нормально здесь приживётся
pu4koff вне форума Ответить с цитированием
Старый 11.11.2009, 00:08   #3
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

если к void* сделать +1 то именно на 1 байт увеличится. проверено)

Код:
    memcpy(k1+4,(char*)&x+4,4);
да! оно! работает) спасибо
не подумал про double*
Роман Радер вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
double -> Время bobik C++ Builder 2 23.09.2009 17:08
long double vs. double VoidMan Общие вопросы C/C++ 1 21.09.2009 18:45
округливание в C#( double to int) Natok Помощь студентам 1 25.05.2009 22:58
Копируем в мемо Bamz Общие вопросы Delphi 2 13.12.2008 23:20
Double/? Viteef Общие вопросы Delphi 6 25.07.2007 02:28