@avion123678

Преобразование типов и арифметика указателей?

Здравствуйте, помогите пожалуйста понять, что не так с кодом, не до конца понимаю, что точно нужно сделать.
Задание:
Написать функцию, принимающую указатель на double и 2 целых числа типа int, и записывающую в ту переменную, на которую указывает указатель-параметр, число типа double, составленное из двух целых чисел-параметров ( число типа double занимает 8 байтов; первое целое число должно занимать с 0 по 3, второе - с 4 по 7).
Код:
#include <iostream>
#include <cstdlib>

using namespace std;

double * func(double *p, int a, int b) {
    double **p1 = &p;
    *(int*)p = a;
    *(int*)p++ = b;
    return *p1;
}

int main() {
    int a = 6, b = 12;
    double s;
    double *p = &s;

    cout << func(p, a, b);

    return 0;
}
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
double * func(double *p, int a, int b) {
    double **p1 = &p;
    *(int*)p = a;
    *(int*)p++ = b;
    return *p1;
}

Почти правильно, не считая странных игр с p1.
По заданию наверно должно быть так:
void func(double *p, int a, int b)
{
    *(int*)p = a;
    *((int*)p + 1) = b;
}


Если быть совсем строгим и избегать языковых проблем (а в коде выше как минимум type-punning), то так:
void func(double *p, int a, int b)
{
    memcpy(p, &a, 4);
    memcpy((char *)p + 4, b, 4);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы