最近一直在跟程序有关的工作,尤其跟C语言打交道特别多,而C语言中大量的用到了结构体,所以抽个时间写写结构体,一边学一边写,就当是个笔记了,大家共同学习,共同进步。有些地方不是太好,有错误的地方还望批评指正。
结构体的定义形式
结构体的定义有以下集中形式,先罗列出来,再分别说每一种如何使用。
第一种:
struct A
{
int aa;
float bb;
};
在这里,struct A 就相当于是一个数据类型,这种数据类型跟int, float 等是一样的,那么在使用的时候,就可以直接来定义变量,例如我想定义一个 新的变量:
int func()
{
struct A aaa; // 这里就定义了一个类型是struct A的一个变量aaa
}
// ------------------------------------------------------------------------------------------------------------------------
第二种:
struct B
{
int aa;
float bb;
}BB;
这种定义形式,实际上就是第一种,在定义类型的同时,也定义变量。可以直接使用BB了。
当然了,还可以定义其他的变量
int func()
{
BB.aa = 0;
BB.bb = 12.3f;
struct B BBB;
BBB.aa = 1;
BBB.bb = 34.0f;
}
// ------------------------------------------------------------------------------------------------------------------------
第三种:
struct
{
int aa;
float bb;
}C;
这种定义形式太省事了,只定义了一个结构变量,两个类型都没有,使用方法:
int func()
{
C.aa = 5;
C.bb = 32.9f;
}
// ------------------------------------------------------------------------------------------------------------------------
第四种:
typedef struct D
{
int aa;
float bb;
}DD;
这种其实就是类似于给类型 struct D取一个名字DD, 就像 typedef int myint 一样。就是给已有的数据类型重新给一个名字,那么就可以这样来用了:
int func()
{
DD ddd; // 当然了也可以用 struct D ddd 来代替,因为是等价的。
ddd.aa = 3;
ddd.bb = 9.0f;
}
// ------------------------------------------------------------------------------------------------------------------------
第五种:
typedef struct E
{
int aa;
float bb;
}* pEE; // pEE 就等价于 struct E *
这种是以指针的形式存在的,就是说,这个类型定义的时候,就是一个指针,可以这样来用:
int func()
{
pEE eee; // 此时,eee就是一个指针
eee->aa = 5;
eee->bb = 6.7f;
}
// ------------------------------------------------------------------------------------------------------------------------
第六种:
typedef struct F
{
int aa;
float bb;
}* PF, FF; // PF 等价于 struct F*,而 FF等价于 struct F,所以可以这样来用:
int func()
{
PF ff;
ff->aa = 8;
ff->bb = 9;
FF fff;
fff.aa = 78;
fff.bb = 98;
ff = &fff; // 因为ff是一个指针
}