结构体的复习

最近在写一个通信协议方面的程序,遇到结构体方面的一些问题,现在来整理一下,

问题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
",LeiFeng_Sch.Grade);
34     //现在给小学的学生小明来建立档案
35  
36     
37     system("pause");
38     return 0;
39 }

原文地址:https://www.cnblogs.com/liangbo-1024/p/9261942.html