C语言学习 18-10-23

xiaoxiao2025-11-12  17

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字节。

经过上面两个例题可以说明为什么第六点着重强调基本数据类型。

转载请注明原文地址: https://www.6miu.com/read-5039493.html

最新回复(0)