#c #struct
#c #структура
Вопрос:
как организовать структуру jo, чтобы член c получал значение gpr[0].a когда я даю число gpr[0].a в основной функции. Кажется, я не могу использовать ‘=’, чтобы заставить их содержать одно и то же значение в определении структуры. Не меняйте основную функцию, просто реорганизуйте структуру jo, получите результат ou.c =1, ou.d =2
#include <stdio.h>
#include <stdlib.h>
typedef struct {
union {
double a;
int b;
} gpr[2];
double c, d;
} jo;
int main (int argc, char *argv[])
{
jo ou;
ou.gpr[0].a = 1;
ou.gpr[1].a = 2;
printf("%fn", ou.c);
printf("%fn", ou.d);
return 0;
}
любая помощь будет оценена
Комментарии:
1. «Не меняйте основную функцию, просто реорганизуйте структуру jo, получите результат ou.c =1, ou.d =2″… Спасибо за ваш заказ, хотите картофель фри с этим?
2. Если вы хотите
c
содержать значениеa
, назначьте егоc
; самый простой способ.3. @MD XF, Да, как написать структуру, просто сделайте так, чтобы они содержали одно и то же значение
4. Вы не можете. Определение структуры не имеет такой возможности. Что вы можете сделать, так это иметь функцию настройки или макрос, который делает это за вас. Таким образом, вместо того, чтобы устанавливать
a
напрямую, функция / макрос будет вызываться для выполнения того, что устанавливает обаa
иc
. Или, я думаю, вы могли бы определить свое собственное расширение для C и получить его одобрение комитетом по стандартам C. В зависимости от того, что вам проще.5. @kaylum: «Вы не можете» — это ответ, а не комментарий. Тогда я мог бы понизить его за то, что он неправильный.
Ответ №1:
Это делается для проверки ваших знаний о объединениях. Итак, в настоящее время у вас есть объединение a
и b
в массиве длиной два. Теперь нам нужно, чтобы gpr[0]
было таким же, как c
и gpr[1]
быть таким же, как d
.
Итак, каждый элемент массива имеет длину sizeof(double)
, и их два. Итак, нам нужна структура, состоящая из 2 двойных ( c
и d
), которые будут объединены с gpr[2]
переменной.
Таким образом, это должно сработать:
typedef struct {
union {
struct {
double c;
double d;
};
union {
double a;
int b;
} gpr[2];
};
} jo;
Мы должны использовать анонимные структуры и объединения, иначе код должен измениться, чтобы мы могли ссылаться на элементы.