1.结构体
struct NAMENOTE
{
int id;
char *name;
char *tel_num;
};
起别名即为使用typedef:
typedef struct NAMENOTE
{
int id;
char *name;
char *tel_name;
}NameNote;
(1).struct+结构体名+变量名 = {};
(2).结构体别名+变量名 = {};
struct NAMENOTE c= {1, "C", "111"};
NameNote python = {2, "python", "222"};
类似于python中的字典类型,不过是需要提前申明key值的字典,结构体的初始化相当于给字典的key值赋上value值,因此可对其中每一个属性进行改值操作。
c.id = 111;
c.tel_num = "110";
NameNote *p_c = &c;
NameNote *p_python = &python;
通过指针修改结构体的属性:
//“笨”方法
(*p_c).id = 111;
(*p_c).name = "C_C++";
//结构体指针专有方法
p_c->id = 222;
p_c->name = "C++";
对于一个结构体来说,其中具有各种各样的基本数据类型,那么该如何判断一个结构体类型所占空间的大小呢?
首先找出该结构体中所占空间最大的基本数据类型,按每行都具有该基本数据类型所空间大小顺序填充,每行不超过最大类型所占的空间。
比如1中所声明的结构体,其中占空间最大(32位)的是int,char *,都为4个字节,因此该结构体的大小为16字节。
查看结构体类型所占空间可以使用关键字sizeof。
例1.struct AA struct BB
{ {
int a; char a;
double b; int b;
char c; char c;
char *d; char *d;
}; };
32位系统下。
解:AA中所占空间最大的基本数据类型是double,为8个字节,第三行的char c占一个字节,char *d占四个字节,第三行共有8个字节,可以装下c和d,故AA的大小为24字节;BB中所占空间最大的基本数据类型是int和char *,且都为4个字节,故BB占16字节空间。
例2:struct CC
{
int a;
int b[5];
char c;
};
解:由于int b[5]不是基本数据类型,故最大为int,占4个字节,int b[5]共占20个字节,char c占4个字节,一共28字节。
经过上面两个例题可以说明为什么第六点着重强调基本数据类型。