Как определить структуру с элементом типа указателя? - PullRequest
1 голос
/ 21 сентября 2019

У меня есть typedef struct, но с указателем типа наименования *Ptype, как показано ниже -

typedef struct
{
    int InputIntArg1;
    int InputIntArg2;
    char InputCharArg1;
} *Ptype;

Я хочу определить элемент (Item1) и назначить номера его элементам (InputIntArg1 & InputIntArg2).Тем не менее, Item1 является указателем.Можно ли не изменить наименование typedef (*Ptype) и сделать правильное объявление?

int main(void)
{
    Ptype Item1; // <---------- How to modify this line?
    Ptype Item2;

    Item1.InputIntArg1 = 1;
    Item1.InputIntArg2 = 7;
    Item2 = &Item1;
    printf("Num1 = %d \n", Item2->InputIntArg1);
}

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Нет, просто нет способа ссылаться на сам анонимный тип структуры с Ptype.Лучшее, что вы можете сделать, это добавить базовый тип и типы указателей в одно и то же определение типа:

typedef struct
{
    int InputIntArg1;
    int InputIntArg2;
    char InputCharArg1;
} type, *Ptype;

Затем просто используйте type для фактической структуры и Ptype для указателя на нее.

1 голос
/ 21 сентября 2019

Я бы не скрывал указатель на структуру с typedef.

Возможно, используйте:

typedef struct
{
    int InputIntArg1;
    int InputIntArg2;
    char InputCharArg1;
} Type;

Тогда вы можете написать:

int main(void)
{
    Type Item1;
    Type *Item2;

    Item1.InputIntArg1 = 1;
    Item1.InputIntArg2 = 7;
    Item2 = &Item1;
    printf("Num1 = %d \n", Item2->InputIntArg1);
}

Так чтопроисходит:

  • Item1 - структура Ptype
  • Item2 - указатель на структуру Ptype
  • с присваиванием Item2 = &Item1; Item2 теперь указывает на структуру Item1
  • используя указатель Item2, вы теперь получаете доступ к значениям структуры Item1
...