我已经有一段时间没有接触C语言了,所以我只是浏览了一些概念,但找不到任何关于结构的好来源。
有人能解释一下吗
struct A
{
int a;
char b;
float c;
};
这是结构A
的声明还是定义。
它声明了一个具有结构标记A
和指定成员的结构。它既不定义也不为对象保留任何存储。
根据C99标准,6.7声明:
语义
5声明指定了一组标识符。标识符的定义就是一个声明标识符:
--对于对象,导致为该对象;
--对于功能,包括功能体;(脚注98)
--对于枚举常量或typedef名称,是标识符。
对于定义,您需要在最后一个分号之前提供一个对象标识符:
struct A
{
int a;
char b;
float c;
} mystruct;
要初始化mystruct,您需要编写
struct A
{
int a;
char b;
float c;
} mystruct = { 42, 'x', 3.14 };
这是一个声明。
struct A;
是正向声明或不完整声明。
struct A
{
int a;
char b;
float c;
};
是完整的struct
声明。
示例
另请查看comp.lang.cFAQ列表问题11.5
在前向声明struct
之后,可以使用结构指针,但不能取消引用指针,也不能使用sizeof
运算符或创建struct
的实例。
声明后,您还可以使用struct
对象,应用sizeof
运算符等
来自6.7.2.1结构和并集说明符来自C11规范
8在终止的}之后,类型才是不完整的列表,然后完成。
以及6.7.2.3标签
如果出现
结构或联合标识符形式的类型说明符除了作为上述表格的一部分,没有其他声明如果标识符作为标记可见,则它声明不完整结构或联合类型,并将标识符声明为这种类型131)
131[/sup>不存在具有enum的类似构造
这不应与extern struct A aa;
v/s struct A aa ={/*Some values*/};
混淆,后者是对象aa
的声明和定义。