C语言--结构体

在现实生活中,对具体对象进行描述的时候,发现是比较复杂的,对象一般是由不同的类型组合在一起。例如:描述一个人的时候,习惯性会描述他的姓名,年龄,联系方式等。这些不同类型的数据互相联系在一起,就组成了一个有机的整体。在C语言中,如果想表示这个有机的整体,就要用到一种新的数据类型—— 结构体( struct )。

一、结构体类型的声明

结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。

结构体的声明

struct tag {
成员列表;
}变量列表;
// struct 结构体关键字
// tag 结构体标签
// struct tag 结构体类型

比如描述学生,学生包括: 姓名 + 出生年月 + 性别 + 学号 4 项信息,这里只能使用结构体来描述了。
/*
描述学生:姓名 + 出生年月 + 性别 + 学号
学生 ----> 是一个复杂对象
描述复杂对象 ---- 》结构体 ----- 》自己定义的数据类型
*/

创建结构体类型

struct Student {
char name[50];// "张三"
char birthday[50]; // "1996-09-19"
int gender; // 1
char id[100]; // "20200102"
};

结构体成员的类型

结构体成员可以是普通变量,数组,指针,甚至是其它的结构体。

二、结构体变量及初始化

使用结构体类型,创建该类型对应的结构体变量
struct Student {
char name[50];
char birthday[50];
int gender;
char id[100];
}stu1,stu2,stu3;
// stu1,stu2.stu3 全局的结构体变量(不建议使用)
// 在函数内部使用结构体类型声明的变量是局部的结构体变量
void fun(){
struct Student stu;
......
}

特殊的声明

在声明结构体的时候,可以不完全声明。
//typedef struct Student {
typedef struct {
char name[50];// "张三"
char birthday[50]; // "1996-09-19"
int gender; // 1
char id[100]; // "20200102"
}Stu;
// 可以使用别名定义变量并初始化
Stu student = {"张三","1996-09-19",1,"20200102"};

三、结构体的自引用

在结构体中包含一个类型为该结构体本身的成员是否可以?

struct Node {
int ele;
struct Node next;
};
是否可行? (不可行)
如果可以,那 sizeof(struct Node) 是多少?
(正确的自引用方式)
struct Node {
int ele;
struct Node* next; // 存放结构体指针类型的变量
};

四、结构体成员访问

打印学生的学号和姓名,使用 . 操作符(结构成员访问操作符)
保存 stu 变量的地址
利用 *[ 解引用操作符 ] 打印学号和姓名
上面的操作明显过于复杂, C 语言中提供了箭头 (->) ,可以通过指针直接找到结构体变量的成员
typedef struct Ele {
int ele ;
struct Ele * next ;
} Node ;
printf ( "%s\n" , stu . id );
printf ( "%s\n" , stu . name );
struct Student * p_stu = & stu ;
printf ( "%s\n" , ( * p_stu ). id );
printf ( "%s\n" , ( * p_stu ). name );
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值