```在C`typedef struct`声明中是什么意思?

时间:2013-03-25 13:48:40

标签: c struct

我正在查看C结构,其中包含一些我以前从未见过的语法。结构如下所示:

typedef struct structExample {
   int member1;
   int member2
} * structNAME;

我知道通常结构为:

typedef struct structExample {
   int member1;
   int member2
} structNAME;

我可以通过说:

来引用第二个结构定义的成员
structNAME* tempStruct = malloc(sizeof(structNAME));
// (intitialize members)
tempstruct->member1;

第一个结构定义中的额外*做了什么,以及如何引用第一个结构定义的成员?

5 个答案:

答案 0 :(得分:4)

这意味着定义的类型是指针类型。这是声明类型的等效方法:

struct structExample {
    int member1;
    int member2;
};
typedef struct structExample * structNAME;

您可以这样使用它:

structNAME mystruct = malloc (sizeof (struct structExample));
mystruct->member1 = 42;

答案 1 :(得分:2)

typedef使这两个语句相同

struct structExample *myStruct;
structName myStruct;

它使structName代表指向struct structExample

的指针

作为一种观点,我不喜欢这种编码风格,因为它更难以知道变量是否是指针。如果你有

,这会有所帮助
typedef struct structExample * structExampleRef;

提示它是指向struct structExample;

的指针

答案 2 :(得分:1)

structNAME被定义为struct structExample上的指针。所以你可以做到

structNAME tempStructPtr = malloc(sizeOf(struct structExample));
tempStructPtr->member1 = 2;

答案 3 :(得分:1)

了解这些内容的秘诀在于,您可以将typedef置于任何声明之前,将TYPENAME VARIABLENAME转换为typedef TYPENAME ALIASEDNAME

由于如果这是一个普通的声明,星号不能成为VARIABLENAME部分的一部分,它必须是该类型的一部分。类型名称后面的星号表示“指向”前一种类型的指针。

比较一下:

typedef int * my_int_pointer;

它完全相同,除了你的情况而不是int你声明struct

答案 4 :(得分:0)

在这种情况下(* structNAME)是该结构的指针变量..