结构体定义
typedef struct _oper {
int a;
int b;
} oper;//定义结构体
oper a1;//定义变量
结构体定义并不是定义一个变量,而是定义了一种数据类型,这种类型是你定义的,它可以和语言本身所自有的简单数据类型一样使用(如 int )。
结构体本身并不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。
一个结构体变量占多大内存空间呢?这是由这种结构体类型的定义决定的,可以想象为了同时存储结构体的每一个成员,那么结构体变量的存储大小,就应该是所有分量的存储空间的总合。
结构体初始化
typedef struct _oper {
int a;
int b;
} oper;
int main()
{
//1、顺序初始化
oper oper_one = {10,20};
printf("oper_one caculate: a = %d b =%d\n", oper_one.a,oper_one.b);
//2.1、乱序初始化
oper oper_two = {
.b = 30,
.a = 20,
};
//2.2、乱序初始化
oper oper_three = {
a:40,
b:20,
};
printf("oper_three caculate: a = %d b =%d\n", oper_three.a,oper_three.b);
//3、整体初始化
oper oper_four;
oper_four = oper_three;
printf("oper_four caculate: a = %d b =%d\n", oper_four.a,oper_four.b);
return 0;
}
单项初始化(顺序初始化)
oper oper_one = {10, 20, add};
单项初始化(乱序初始化)
其中.形式为C99支持,
oper oper_two = {
.b = 30,
.a = 20,
.cal_func = &add,
};
:形式为GCC支持
oper oper_three = {
cal_func:&add,
a:40,
b:20,
};
整体初始化
不同于数组,标准C中结构体变量可以整体赋值
oper oper_four;
oper_four = oper_three;
使用memset进行初始化
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
memset(&stTest,0,sizeof(struct sample_struct));