C 结构体、位域
参考链接: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;
};
C 结构体、位域的更多相关文章
- 关于牛客网C语言结构体位域(bit-fields)的一道题
题目链接地址: https://www.nowcoder.com/questionTerminal/f4e20747a2dd4649bac0c028daa234f4 来源:牛客网 低地址字节 Byte ...
- C 结构体位域
位域 : 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一 ...
- 字节序转换与结构体位域(bit field)值的读取
最近又遇到了几年前遇到的问题,标记一下. 对于跨字节位域(bit field)而言,如果数据传输前后环境的字节序不同(LE->BE,BE->LE),简单地调用(ntohs/ntohl/ht ...
- 字节序转换与结构体位域(bit field)值的读取 Part 2 - 深入理解字节序和结构体位域存储方式
上一篇文章讲解了带位域的结构体,在从大端机(Big Endian)传输到小端机(Little Endian)后如何解析位域值.下面继续深入详解字节序,以及位域存储的方式. (1) 我们知道,存储数字时 ...
- C语言结构体--位域
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.比如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...
- C语言笔记 08_函数指针&回调函数&字符串&结构体&位域
函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: / ...
- c语言学习笔记 - 结构体位域
在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...
- C语言结构体位域
demo: typedef struct { int a:2; int b:2; int c:1; }test; int main() { test t; t.a=1; t.b=3; t.c=1; / ...
- 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)
一.前言 编译环境是vs2010(32位). <span style="font-size:18px;">#include<iostream> #inclu ...
- C结构体之位域(位段)
C结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C ...
随机推荐
- python web框架Flask——后台登录
项目搭建 创建一个项目之后,需要在手动创建几个包(含有__init__.py文件的目录)和文件 1.在主目录下创建配置文件:config.py 2.在主目录下创建扩展文件:exts.py 3.在主目录 ...
- python web框架Django入门
Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...
- 在执行方法和Web资源中获取传递过来参数的值
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复228或者20161026可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- ORACLE基础之oracle锁(oracle lock mode)详解
ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusiv ...
- 2018年最新Java面试题及答案整理
基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰符: pub ...
- 网页解析 -- bs4 和 xpath 的简单使用
bs4 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来说更加的简单方便 中文文档:https://beautifulsoup.read ...
- 简单的shell脚本
1.1每隔一秒向屏幕输出一个数字,并且每次加1. #/bin/bashfor((i=1;i<=100;i++)) do echo -en " $i\n"; sleep 1;d ...
- MATLAB实例:PCA降维
MATLAB实例:PCA降维 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. iris数据 5.1,3.5,1.4,0.2,1 4.9,3.0,1 ...
- vue实现点击图标,图标在2s中完成旋转
<!-- 点击 vue实现点击图标,图标在2s中完成旋转 1==>如何让它在2s内完成旋转 使用动画 transform: rotate(-180deg); 动画的运动状态 transit ...
- 7.Java基础_Java数据输入
import java.util.Scanner; public class Output { public static void main(String[] args){ Scanner sc=n ...