Member 11010948 Ответов: 2

Как привести значение в качестве переменной-члена структурной записи


Как привести, преобразовав "переменную как тип"

struct {int n; float f;} манекен;
плавающее число=(dummy.f)123.456;

кроме того, если мы знаем, что "dummy.f" является "заполнителем" структурного адреса записи %0x04 в платформе x86, набранной "float", поэтому, если все о "переменной" известно, она должна быть простой для простого легкого приведения типа.

не так ли ?

Я думаю, что ошибка находится в базовом ядре языка Си.

спасибо

Что я уже пробовал:

Я пытался безуспешно:

плавающее число=*(dummy.f*)123.456;
число с плавающей точкой=*(манекен.theFloatAddress*)123.456;

2 Ответов

Рейтинг:
2

CPallini

Вы не можете этого сделать, dummy.f не является типом, является членом структуры, имеющей тип float.
Вы можете просто написать

float number = 123.456;

или, в зависимости от ваших потребностей
float number = dummy.f;


Не могли бы вы четко сформулировать свои требования?


Member 11010948

извиняюсь. вы упустили смысл кастинга!

CPallini

И в чем же заключается "смысл кастинга"?

jeron1

Ловить рыбу, конечно! ;-)

Maciej Los

5ed!
Кстати: OP (вероятно) хочет установить значение для члена структуры. Смотрите ответ OriginalGriff.

CPallini

Спасибо!

Рейтинг:
0

OriginalGriff

Один struct это тип, который вы создаете для хранения связанных значений вместе:

struct 
   {
   int n; 
   float f;
   } dummy;
Или часто лучше
typedef struct 
   {
   int n; 
   float f;
   } dummy;
Таким образом, когда вы создаете экземпляр структуры, он содержит как целочисленные, так и значения с плавающей запятой, которые вам нужны вместе (вместо того, чтобы создавать для них отдельные переменные каждый раз, когда они вам нужны). Это особенно полезно, когда вы хотите сохранить коллекции элементов "вместе" - вместо объявления двух массивов:
int ns[100];
int fs[100];
и если вы не забыли обновить правильные индексы для обоих, вы можете объявить массив struct:
dummy arrayOfReltedValues[100];
и система будет "держать" связанные ценности вместе.

Поэтому, когда вы хотите получить доступ к значениям, это довольно просто, вы просто используете точечный синтаксис:
dummy dum;
...
dum.n = 666;
dum.f = 1.2345;
...
printf("%u:%f\n", dum.n, dum.f);
И вам не нужно ничего бросать, потому что система "знает", какого типа каждая часть struct является.


Maciej Los

5ed!