C - 这段代码是什么意思?(关于结构)

时间:2013-11-21 13:00:58

标签: c struct

如果我想在c中编写结构,请写

typedef struct ObjectP
{
   some code
}

这是合法的,但这段代码怎么样?

typedef struct Object* ObjectP
{
   some code
}

为什么行 typedef struct Object * ObjectP

上存在语法错误

4 个答案:

答案 0 :(得分:5)

这不是你如何使用typedef结构。您必须在结构之后添加类型别名,例如

typedef struct Object
{
    ...
} Object;

如果您想要多个类型别名,只需将它们添加到结尾,如

typedef struct Object
{
    ...
} Object, *ObjectP;

您将定义分开:

struct Object
{
    ...
};

typedef struct Object Object;
typedef struct Object *ObjectP;

答案 1 :(得分:2)

您使用typedef struct指针的错误语法。

使用:

typedef struct Object
{
   some code
}
*ObjectP;

现在,您可以使用ObjectP以这种方式定义指向此struct的指针:ObjectP ptr1_struct, ptr2_struct;

答案 2 :(得分:1)

结构定义应以“; ”结尾。 typedef不是结构定义的一部分。这是一个重命名惯例。

答案 3 :(得分:0)

结构定义的语法是

    struct identifieropt { struct-declaration-list }

可选标识符是struct 标记;它是可以引用结构类型的名称。例如:

struct foo { int x; int y; double z; };

foo是该结构类型的标记;然后,我可以在需要类型名称的任何地方使用struct foo

struct foo bar;
struct foo *fptr;

我可以将结构定义和对象声明合并为一个:

struct foo { int x; int y; double z; } bar, *fptr;

如果我想为指向struct foo的指针创建一个typedef名称,请按以下步骤操作:

typedef struct foo { int x; int y; double z} *FooP;

FooP现在是struct foo *的同义词:

FooP myptr;

相当于

struct foo { int x; int y; double z; } *myptr;