Вычисление значения элемента структуры без прямого обращения - 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));
}