C结构语法的澄清
和往常一样,情况并不明朗。它给出了如下结构的语法:C结构语法的澄清,c,struct,C,Struct,和往常一样,情况并不明朗。它给出了如下结构的语法: [typedef] struct [struct_name] { type attribute; type attribute2; /* ... */ [struct struct_name *struct_instance;] } [struct_name_t] [struct_instance]; typedef关键字在这里做什么 [struct_name]是什么意思?(这是您为新结构数据类型指定的名称吗
[typedef] struct [struct_name]
{
type attribute;
type attribute2;
/* ... */
[struct struct_name *struct_instance;]
} [struct_name_t] [struct_instance];
- typedef关键字在这里做什么
- [struct_name]是什么意思?(这是您为新结构数据类型指定的名称吗?)
- [struct_name_t]是什么意思
- [struct_instance]是什么意思?(是否正在创建结构的单个实例?)
- 我假定
在结构中创建一个指针,该指针将指向该结构的第二个实例)。对吗[struct struct_name*struct_instance;]
char name[20]
和char artist[10]
,并假设我想制作一个实例,mySong,{“我唱歌”,“我”},这在sub.c和sub.h中会是什么样子
谢谢
•typedef关键字在这里做什么?
它允许您创建结构的typedef,就像其他类型一样。这使您不必每次都键入struct xxx struct\u name
。您不需要这个,因此[]
•[struct_name]是什么意思?(这是您为新结构数据类型指定的名称吗?
是的,如果你也选择的话。您还可以创建一个无名结构,这样就不需要给它命名
•结构名称是什么意思?
这是typedef的名称,如果您选择对结构进行typedef
•[struct_instance]是什么意思?(是否正在创建结构的单个实例?
是的,它用于创建一个或多个sturct实例
•我假定[struct struct_name*struct_instance;]在结构中创建一个指针,该指针将指向该结构的第二个实例)。正确吗?
对,这对于链表中的“下一个”类型指针很有用
结构示例:
typedef struct foo{
int count;
struct foo *next;
} foo_t myfoo;
是所填写内容的一个示例;这允许您通过以下方式声明新结构:
foo_t new_foo_struct;
因为typedef和typedef的名称。如果您省略了以下内容:
struct foo{
int count;
struct foo *next;
} myfoo;
struct_name_t myVariable;
struct_name_t myVariable = { "Foo", "bar" };
现在,您必须为每个实例使用struct
关键字,例如:
struct foo new_foo_struct;
要将其拆分为多个文件,请执行以下操作:
/*sub.h*/
typedef struct{
char name[20];
char artist[10];
}song;
然后在来源中:
/*sub.c*/
#include "sub.h"
/*this needs to go into a function or something...*/
song mysong;
strcpy(mysong.name, "Mesinging");
strcpy(mysong.artist, "Me");
•typedef关键字在这里做什么?
它允许您创建结构的typedef,就像其他类型一样。这使您不必每次都键入struct xxx struct\u name
。您不需要这个,因此[]
•[struct_name]是什么意思?(这是您为新结构数据类型指定的名称吗?
是的,如果你也选择的话。您还可以创建一个无名结构,这样就不需要给它命名
•结构名称是什么意思?
这是typedef的名称,如果您选择对结构进行typedef
•[struct_instance]是什么意思?(是否正在创建结构的单个实例?
是的,它用于创建一个或多个sturct实例
•我假定[struct struct_name*struct_instance;]在结构中创建一个指针,该指针将指向该结构的第二个实例)。正确吗?
对,这对于链表中的“下一个”类型指针很有用
结构示例:
typedef struct foo{
int count;
struct foo *next;
} foo_t myfoo;
是所填写内容的一个示例;这允许您通过以下方式声明新结构:
foo_t new_foo_struct;
因为typedef和typedef的名称。如果您省略了以下内容:
struct foo{
int count;
struct foo *next;
} myfoo;
struct_name_t myVariable;
struct_name_t myVariable = { "Foo", "bar" };
现在,您必须为每个实例使用struct
关键字,例如:
struct foo new_foo_struct;
要将其拆分为多个文件,请执行以下操作:
/*sub.h*/
typedef struct{
char name[20];
char artist[10];
}song;
然后在来源中:
/*sub.c*/
#include "sub.h"
/*this needs to go into a function or something...*/
song mysong;
strcpy(mysong.name, "Mesinging");
strcpy(mysong.artist, "Me");
typedef-这意味着您正在创建一个新类型(struct\u name\t
)
因此,在C代码中,您可以创建如下实例:
struct foo{
int count;
struct foo *next;
} myfoo;
struct_name_t myVariable;
struct_name_t myVariable = { "Foo", "bar" };
或者您可以显式地编写:
struct struct_name myVariable;
末尾的structInstance
表示您希望在定义结构的同时创建结构的实例(该变量的名称为structInstance)。它不是你会一直使用的东西,但在某些情况下它是有用的
如果要在创建时创建结构实例并分配/初始化成员,可以按如下方式执行:
struct foo{
int count;
struct foo *next;
} myfoo;
struct_name_t myVariable;
struct_name_t myVariable = { "Foo", "bar" };
“名称”成员将包含“Foo”,艺术家成员将包含“bar”
注:
如果你这样写:
struct_name_t myVariable = { 0 };
这将用零填充整个结构
typedef-这意味着您正在创建一个新类型(struct\u name\t
)
因此,在C代码中,您可以创建如下实例:
struct foo{
int count;
struct foo *next;
} myfoo;
struct_name_t myVariable;
struct_name_t myVariable = { "Foo", "bar" };
或者您可以显式地编写:
struct struct_name myVariable;
末尾的structInstance
表示您希望在定义结构的同时创建结构的实例(该变量的名称为structInstance)。它不是你会一直使用的东西,但在某些情况下它是有用的
如果要在创建时创建结构实例并分配/初始化成员,可以按如下方式执行:
struct foo{
int count;
struct foo *next;
} myfoo;
struct_name_t myVariable;
struct_name_t myVariable = { "Foo", "bar" };
“名称”成员将包含“Foo”,艺术家成员将包含“bar”
注:
如果你这样写:
struct_name_t myVariable = { 0 };
这将用零填充整个结构 那篇文章只是错误地混合了不同的概念,现在纠正了这一点。结构是通过
struct tagname {
... fields ...
};
仅此而已,标记名
部分在某些上下文中是可选的
此外,你可以
- 通过
typedef
- 或
类型的变量struct
“一气呵成”,但我不认为这是一种好的风格,应该分开。那篇文章只是错误地混合了不同的概念,现在纠正了这一点。结构是通过
struct tagname {
... fields ...
};
仅此而已,标记名
部分是optiona