8

我正在查看一个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;

第一个结构定义中的额外内容有什么作用,*我将如何引用第一个结构定义的成员?

4

5 回答 5

4

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

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

你会像这样使用它:

structNAME mystruct = malloc (sizeof (struct structExample));
mystruct->member1 = 42;
于 2013-03-25T13:53:35.853 回答
2

typedef 使这两个语句相同

struct structExample *myStruct;
structName myStruct;

structName代表指向struct structExample

作为一种观点,我不喜欢这种编码风格,因为它使知道变量是否是指针变得更加困难。如果你有它会有所帮助

typedef struct structExample * structExampleRef;

提示它是指向的指针struct structExample

于 2013-03-25T13:52:51.530 回答
1

structNAME is defined as a pointer on struct structExample. SO you can do

structNAME tempStructPtr = malloc(sizeOf(struct structExample));
tempStructPtr->member1 = 2;
于 2013-03-25T13:50:38.950 回答
1

理解这些的秘诀是你可以把typedef任何声明放在前面,TYPENAME VARIABLENAME变成typedef TYPENAME ALIASEDNAME.

VARIABLENAME如果这是一个简单的声明,则星号不能是该部分的一部分,因此它必须是该类型的一部分。类型名称后面的星号表示“指向”前一个类型的“指针”。

比较一下:

typedef int * my_int_pointer;

它完全一样,除了你的情况而不是int你声明一个struct.

于 2013-03-25T14:15:22.680 回答
0

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

于 2013-03-25T14:06:23.617 回答