C语言进阶——4自定义类型(1)—结构体

本小节重点:

结构体类型的声明
结构的自引用
结构体变量的定义和初始化
结构体内存对齐
结构体传参
结构体实现位段(位段的填充&可移植性)

1 结构体的声明

1.1 结构的基础知识

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

1.2 结构的声明

struct tag
{
   
   
   member-list;
}variable-list;

示例:描述一个学生信息

struct Stu
{
   
   
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}; //注意:分号不能丢

1.3 特殊的声明

在声明结构的时候,可以不完全的声明。

//匿名结构体类型
struct
{
   
   
   int a;
   char b;
   float c;
}x;
struct
{
   
   
   int a;
   char b;
   float c;
}a[20], *p;

上面的两个结构在声明的时候省略掉了结构体标签(tag)。
那么在上面代码的基础上,下面的代码合法吗?

p = &x;

在这里插入图片描述
答案是:是非法的,编译器会把上面的两个声明当成完全不同的两个类型。

1.4 结构的自引用

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

代码1


struct Node
{
   
   
 int data;
 struct Node next;
};
//可行否?
如果可以,那sizeof(struct Node)是多少?

代码1分析:不可以这样自引用
在这里插入图片描述

正确的结构体自引用方式:

struct Node
{
   
   
 int data;
 struct Node* next;
};

在这里插入图片描述

1.5 结构体变量的定义和初始化

1. 结构体变量定义和初始化的几种方式

声明类型的同时定义变量p1/定义结构体变量p2/定义变量的时候同时赋值

代码1

struct Point
{
   
   
	int x;
	int y;
}p1;             //声明类型的同时定义变量p1 这里定义的变量都是全局变量


//初始化:定义变量的同时赋初值。
struct Point p3 = {
   
    1, 2 };

int main()
{
   
   
    struct Point p2;//定义结构体变量p2   这里定义的是局部变量
	return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值