一、结构体sturct语法基础:
/*结构体说明: 1、结构体是一种构造数据类型,将不同类型的数据组合成一个整体 2、结构体定义: struct 结构体名 { 类型标识符 成员名; }; 3、struct是关键字,不能省略;结构体名可以省略,无名结构体;成员类型可以是基本型或构造型; 4、结构体变量的定义: (1)先定义结构体类型,在定义结构体变量: struct 结构体名 {类型标识符 成员名;}; struct 结构体名 结构体变量名; (2)定义结构体类型的同时定义结构体变量: struct 结构体名 {类型标识符 成员名;} 结构体变量名; (3)直接定义结构体变量(没有结构体名的无名结构体):struct {类型标识符 成员名;} 结构体变量名; 这样没有结构体名的,只能这样定义一次,也就是说不能再向(1)那样在后面随意定义了 5、结构体变量的引用: (1)结构体变量不能整体引用,只能引用变量成员 (2)结构体变量引用方式:结构体变量名.成员名 (3)例如 struct 结构体名 {类型标识符 成员1;} 结构体变量1,结构体变量2;这样,可以把一个变量赋值给另一个变量,如 结构体名.变量1=结构体名.变量1; 6、结构体变量的初始化: (1)形式一:struct 结构体名 { 类型标识符 成员名;} ; struct 结构体名 结构体变量={初始数据}; (2)形式二:struct 结构体名 { 类型标识符 成员名;} 结构体变量={初始数据}; 7、结构体数组: (1)结构体数组就是,用一个数组来包括所有的结构体变量,数组的每个元素,就是一个结构体变量; (2)形式一:struct 结构体名 { 类型标识符 成员名;} ; struct 结构体名 结构体数组 (3)形式二:struct 结构体名 { 类型标识符 成员名;} 结构体数组; (4)形式三:struct { 类型标识符 成员名;} 结构体数组; 8、结构体数组初始化:在前面的基础上加上初始变量组的各个成员 (1)形式一:用大括号将各个变量的一组成员括起来:结构体名 结构体数组名[]={ {成员1值1,成员2值1},{成员1值2,成员2值2}; (2)形式二:如果不加括号分开,那么按顺序排:结构体名 结构体数组名[]={成员1值1,成员2值1,成员1值2,成员2值2}; 9、结构体和指针 (1)指向结构体变量的指针 a.定义形式:struct 结构体名 *结构体指针名; b.使用结构体指针变量引用成员形式:(*结构体指针名).成员名 或者 结构体指针名->成员名 或者 结构体变量名.成员名 (2)指向结构体数组的指针 (3)用指向结构体的指针作函数参数 a.用结构体变量的成员作参数----值传递 b.用指向结构体变量或数组的指针作参数----地址传递 c.用结构体变量作为参数------多值传递,效率低 */
二、typedef语法基础:
/* typedef说明: 1、typedef是C语言的关键字,作用是为一个数据类型定义一个新的数据类型,它并没有新建一种新的数据类型,只是把原有数据类型换了一个名字而已 2、用法一:为现有的数据类型定义同义词,便于记住和归类使用等,格式:typedef 原有数据类型 定义新的名字;定义之后,可以在任何需要使用原数据类型处,用新的名字替换;例如:typedef int size; 以后就都可以用size来代替int; 3、用法二:用来掩饰复合类型: a.数组,格式:typedef 原数据类型名 数组; 例如:typedef char line[81];以后line a, b; 就等价于 char a[88],b[88]; b.指针,格式:typedef const 原数据类型名 指针 ;例如:typedef char *pstr; 以后使用pstr就相当于char *;(只要是指针生命typedef,不管什么时候都需要在typedef中加一个const,以使得该指针本身是常量,而不是对象。 4、用法三:在链表(struct)中的应用:格式:typedef struct {类型标识符,成员名 }结构名别名;例如:typedef struct { int a; int b;} MY_TYPE; 这样声明之后,以后如果需要定义结构就直接MY_TYPE tmp;tmp是满足这个结构的一个变量; 如果没有家typedef的话,后面直接定义肯定不能省略结构体名,定义的时候struct 结构体名 变量名,这样的形式来定义了 */
时间: 2024-10-07 14:52:21