2013-11-21 50 views
0

如果我想在C中定义一个struct我写Ç - 这是什么代码行的意思(约结构)

typedef struct ObjectP 
{ 
    some code 
} 

,这是合法的,但对于这行代码?

typedef struct Object* ObjectP 
{ 
    some code 
} 

为什么有上线typedef结构对象* ObjectP

+0

你认为第二段代码的含义是什么? – elyashiv

+0

我不知道,我们有一个头文件,我们必须实现 ,并有一个结构,我们必须实现,它是这个结构 ** typedef结构对象* ObjectP ** – KaramJaber

回答

5

一个语法错误,这不是你如何使用typedef与结构。你必须把类型别名结构后,像

typedef struct Object 
{ 
    ... 
} Object; 

如果你想多类型的别名,你只需将它们添加到随后结束,如

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

或者你分开的定义:

struct Object 
{ 
    ... 
}; 

typedef struct Object Object; 
typedef struct Object *ObjectP; 
2

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

用途:

typedef struct Object 
{ 
    some code 
} 
*ObjectP; 

现在你可以使用ObjectP定义指针这个struct这样:ObjectP ptr1_struct, ptr2_struct;

+2

这也不正确。 –

+0

@JohnBode:我很抱歉那个'*',谢谢指出。我纠正了我的答案 –

0

一个结构定义的语法是

 
    structidentifieropt{struct-declaration-list} 

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

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; 

如果我想为指针创建typedef名struct foo,我做如下:

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

FooP现在是struct foo *的代名词:

FooP myptr; 

相当于

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

结构定义应与“结束;“。typedef不是结构定义的一部分,它是一个重命名约定。