以前写程序的时候总是要用到结构体,但是对结构体的定义老是稀里糊涂,今天梳理下,让自己长长记性!
结构体的定义有以下3种形式:
‘ 1、struct Date
{
int year,month,da;
};
这时定义结构体变量: struct Date dt;
或
typedef struct Date Date;//将Date作为struct Date的别名
Date dt;
2、typedef struct Date
{
int year,month,da;
}Date;
或 typedef struct //省去结构名
{
int year,month,da;
}Date; //直接给出该结构体的类型别名
这时定义结构体变量: Date dt;
3、在定义结构体的同时定义结构变量:
struct Date //不省略结构名
{
int year,month,da;
}dt;
或 struct //省去结构名
{
int year,month,da;
}dt;
结构变量在定义时可以赋值初始化,但在定义好之后不能再用各个成员的值给他赋值,但可以用已经初始化的同类型结构变量赋值。
例: Date dt1 = {2015,9,21}; //合法
Date dt1;
dt1 = {2015,9,21}; //非法
Date dt2 = dt1; //合法
或 dt2 = dt1; //合法
我在函数中也经常使用结构体,结构类型也可以作为返回值,但由有返回值的函数调用过程机制可以知道,至少两次赋值过程,因此结构类型作为函数返回值是很低效的。所以常用void型函数,将函数的形参设为结构类型的指针,通过间接引用修改结构变量的值。再一次显示出指针的高效性!