如何定义一个指针类型的结构体?

How to define a structure with a pointer-type item?

我有一个 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);
}

我不会隐藏指向带有 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 结构的值

不,没有办法仅从 Ptype 引用匿名结构类型本身。您能做的最好的事情就是在同一类型定义中添加基类型和指针类型:

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

然后只需使用 type 作为实际结构,并使用 Ptype 作为指向它的指针。