Вычисление значения элемента структуры без прямого обращения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, прошу помощи!Задача такая. Необходимо написать функцию которая вычисляет значение элемента из структуры типа float Обычно мы можем использовать обращение -> или ".", в нашем случае нельзя. Есть ли какие либо альтернативы?Из очевидных инструментов используем побайтовое выравнивание.Остальное только через указатели и математику)Подскажите, пожалуйста, есть ли способы или дайте подсказку где узнать.
#include "stdafx.h"
#include <locale.h>
#include <string.h>
#include <memory.h>
#include <malloc.h>
#include <conio.h>
 
#pragma pack(push,1)//Выравниваем побайтовое хранение по 1
struct Data
{
    int numb;
    float numb_count;//элемент структуры который необходимо найти
    double numb_better;
    char symb[10];
 
};
#pragma pack(pop)

float Numb_count(Data *variable);//функция для вычисления значения float из структуры
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
 
    Data variable={3,3.5,3.555,{"HELLO"}};//Переменная структуры из которой необходимо найти float
 
    Data *P=(Data*)malloc(sizeof(Data));
 
    if(!P)
    {
    printf("Ошибка malloc\n");
    _getch();
    return 0;
    
    }

    return 0;
}
float Numb_count(Data *variable)
{
    float search_numb=0;
 
    ///Вот тут необходимо найти значения переменной из структуры DATA  (3.5)
    //Data.numb_count или Data->numb_count использовать нельзя
 
    return search_numb;
}

Решение задачи: «Вычисление значения элемента структуры без прямого обращения»

textual
Листинг программы
#include <stdio.h>
 
struct Data
{
    int numb;
    float numb_count;
    double numb_better;
    char symb[10];
};
 
float Numb_count (struct Data *);
 
int main(void) {
    struct Data var01 = {3, 3.5, 3.555, {"HELLO"}};
    struct Data var02 = {4, 4.6, 5.678, {"hallo"}};
 
    printf("float var1: %f\n", Numb_count(&var01));
    printf("float var2: %f\n", Numb_count(&var02));
 
    return 0;
}
 
float Numb_count (struct Data *var) {
    return *(float*)((char*)var + sizeof(int));
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы