结构体的复习
最近在写一个通信协议方面的程序,遇到结构体方面的一些问题,现在来整理一下,
问题1、结构体的类型名和结构体变量名可以一样吗?类似下面的:
1 typedef struct Node 2 { 3 uint8_t data; 4 struct Node *pre_node; 5 struct Node *next_node; 6 }Node;
答案:可以一样,结构体名称是类型名,变量名是实体名,一个类型可以有许多实体
举例讲解:
结构体类型定义
第一种:
1 typedef struct LNode 2 3 { 4 int data; //数据域 5 struct LNode *next; //指针域 6 }*LinkList;
第二种:
1 struct LNode 2 { 3 int data; //数据域 4 struct LNode *next; //指针域 5 }; 6 typedef struct LNode *LinkList;
以上两个定义方式是等价的,是将*LinkList定义为struct LNode类型,即LinkList被定义为一个类型名。这样就可以用LinkList来定义说明新的变量了,如:
LinkList L;即将L定义为struct LNode类型的指针变量
2.结构体类型变量定义
定义方式1:
1 struct LNode 2 3 { 4 int data; // 数据域 5 struct LNode *next; // 指针域 6 }LnodeA;
定义方式2:
1 struct LNode 2 { 3 int data; // 数据域 4 struct LNode *next; // 指针域 5 }; struct LNode LnodeA;
以上两个定义方式也是等价的,这样就将LnodeA 定义为一个struct LNode类型的变量,即LnodeA为一个struct LNode 类型的变量名;
以下我们通过测试来说明问题:
首先,我们测试一下结构体的初始化
1 #include <stdio.h> 2 #include <stdlib.h> 3 /***********定义一个同学结构体Stu*************/ 4 typedef struct students 5 { 6 char Sex; //性别 7 int Age; //年龄 8 float Score; //学习费用 9 char Address[20]; //住址 10 }; //定义10个学生 11 12 /***********定义一个老师结构体Tea*************/ 13 typedef struct teachers 14 { 15 char Sex; //性别 16 int Age; //年龄 17 float Score; //学习费用 18 char Address[20]; //住址 19 }; 20 21 /***********定义一个学校结构体SCH*************/ 22 typedef struct School 23 { 24 struct students Stu[10]; //定义有10个学生 25 struct teachers Tea[2]; //定义有2个老师 26 int Grade; //年级 27 }; 28 29 int main() 30 { 31 struct School LeiFeng_Sch; 32 LeiFeng_Sch.Grade = 12; //结构体的初始化 33 printf("小明的性别是:%d\r\n",LeiFeng_Sch.Grade); 34 //现在给小学的学生小明来建立档案 35 36 37 system("pause"); 38 return 0; 39 }