我是一个C语言新手,在编程中对Struct的使用始终很犯晕,后来在一个国外的网站上找到一篇比较详细的介绍,觉得对自己帮助很大,在这里把他翻译出来和大家共享(也加上自己的一点体会),希望对大家有所帮助。
在C和C++有三种定义结构的方法。
typedef struct {
int data;
int text;
} S1;
// 这种方法可以在c或者c++中定义一个S1结构
struct S2 {
int data;
int text;
};
// 这种定义方式只能在C++中使用,而如果用在C中,那么编译器会报错
struct {
int data;
int text;
} S3;
这种方法并没有定义一个结构,而是定义了一个s3的结构变量,编译器会为s3内存。
void main()
{
S1 mine1; // OK , S1 是一个类型
S2 mine2; // OK, S2 是一个类型
S3 mine3; // OK, S3 不是一个类型
S1.data = 5; // ERROR S1 是一个类型
S2.data = 5; // ERROR S2 是一个类型
S3.data = 5; // OK S3是一个变量
}
另外,对与在结构中定义结构本身的变量也有几种写法
struct S6 {
S6* ptr;
};
// 这种写法只能在C++中使用
typedef struct {
S7* ptr;
} S7;
// 这是一种在C和C++中都是错误的定义
如果在C中,我们可以使用这样一个“曲线救国的方法“
typedef struct tagS8{
tagS8 * ptr;
} S8;