C 结构体、位域
2024-09-07 13:03:20
参考链接:https://www.runoob.com/cprogramming/c-structures.html
结构体是干啥的
例如数组可以用来存储多个相同数据类型的数据项,结构体也是一种数据类型,可以用来储存多个不同数据类型的数据项。
定义结构
struct Book{
int i;
float f;
};//这就声明了一个数据体,而Book标识是这种构造的结构体,表示一个标签名(就像类名),声明结构体变量如下:
Book book1,book2,book3;
//也可以用typedef创建新类型
typedef struct
{
int a;
char b;
double c;
} Simple2;
//可以在定义结构体的同时定义一个或者多个结构变量(就好像实例化)
struct Book{
int id;
char name;
}book1,book2;
//可以直接声明一个或者多个结构变量,而不声明标签名(这里需要注意,下面这个和上面的那个是不一样的,因为标签名不一样 ,即使他们的内部一样)
struct {
int id;
char name[100];//这样会使sizeof(book1)的结果为104,因为sizeof(int)为4,再加上这个指定的100字节
}book1,book2;
结构体的嵌套
结构体内部可以包含其他的结构体,还可以包含指向自己结构类型的指针,这样是为了实现其他复杂的数据结构
如果两个结构体互相包含,则需要先对其中的一个进行不完整声明(为啥要声明,因为使用之前就是要声明)
结构体的初始化和访问
初始化
struct Book{
int i;
float f;
}book1={1234,"从入门到放弃"};
//使用**成员访问符`.`**进行访问
printf("%d",book1.i);
结构体作为函数的参数
结构体作为函数的参数和其他类型或者指针的方式一样,只是需要增加一个struct关键字 和标签名
//函数声明
void funcname(struct Book book);
指向结构体的指针和访问
*struct books ptr_name 前面的两个可能是表示类的继承
与指向其他类型的指针声明类似,只是需要增加一个struct关键字和标签名
//函数声明
struct Book *ptrname
访问的时候使用->
运算符代替成员运算符.
位域
位域与结构体类似
struct 位域结构名
{
位域列表
};
位域列表的形式为
类型说明符 位域名: 位域长度
struct k{
int a:1;
int :2; /* 该 2 位不能使用 *///因为是无名域位,用于调整位置
int b:3;
int c:2;
};
最新文章
- 【P1825】表达式整除
- 学习js正则表达式
- [Xamarin] 關於SQLite 的操作 (转帖)
- jsp中表格,表格中的文字根据表格的大小自动换行
- HTML 学习新理论
- Docker镜像的获取与删除
- 全文检索引擎 Lucene.net
- apt-get &;dpkg
- office web apps server 问题和解决办法
- Android:ServiceDemo
- [CSS3] 学习笔记-CSS动画特效
- Session的引入以及Cookie的不足
- 机器学习-GBDT和XGboost
- Beta项目总结
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构
- 【XSY3126】异或II 数学
- BZOJ.4446.[SCOI2015]小凸玩密室(树形DP)
- [CNN] Tool - Deep Visualization
- 回归Android之Android基础和小常识
- css单位分析、颜色设置与调色板
热门文章
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
- CodeForces - 1251E2 (思维+贪心)
- 7.5 高级数据源---Kafka
- 多线程状态与优先级、线程同步与Monitor类、死锁
- 面向对象程序设计(JAVA) 第10周学习指导及要求
- yii2-CaptchaAction macos500 不显示
- hasattr、getattr、setattr、delattr、反射
- Java常识2
- 水平划分table
- [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分