c程序设计语言 by K&R(三)结构
一、类型定义 typedef
typedef int Length;
typedef char* String;
typedef struct tnode* Treeptr;
typedef int (*PFI)(char*, char*);
二、联合 union
一个变量可以合法地保存多种数据类型中任何一种类型的对象。
union u_tag{
int ival;
float fval;
char* sval;
}u;
- u变量必须能保存三种类型中最大的一种。这些类型中的任何一种对象都可以赋值给u。
- 读取的类型必须是最后一次存入的类型。
- 联合只能用其第一个类型的值进行初始化。即上面的示例中只能用int进行初始化。
- 访问方式:
- 联合.成员
- 联合指针->成员
三、位字段
- 什么是位字段?
在存储空间很宝贵的情况下,可能需要将多个对象保存在一个机器字中。C语言中提供了一种直接定义和访问一个字中的位字段的能力。
例如:
#define KEYWORD 01
#define EXTERNAL 02
#define STATIC 04
或
enum {KEYWORD = 01, EXTERNAL = 02, STATIC = 04};
可替换为
struct {
unsigned int is_keyword : 1;
unsigned int is_external: 1;
unsigned int is_static: 1;
}flags;
:后的数字表示字段的宽度,用二进制表示。
- 引用方式:
flags.is_extern = flags.is_external = 1;
#include <stdio.h>
#include <stdlib.h>
struct {
unsigned int a:1;
unsigned int b:1;
unsigned int c:1;
}flags;
int main(void) {
flags.a = flags.b = flags.c = 1;
printf("%d %d %d\n", flags.a, flags.b, flags.c);
return 0;
}
1 1 1
- 字段不是数组,并且没有地址,不能对其使用&运算符。
c程序设计语言 by K&R(三)结构的更多相关文章
- C程序设计语言(K&R) 笔记2
(1) #include <stdio.h> main(){ int c; while((c = getchar()) != EOF){ putchar(c); } } 注意,因为 != ...
- C程序设计语言(K&R) 笔记1
当作复习... (1)将华氏度 换算成 摄氏度,公式: ℃=(5/9)(̧°F-32) #include <stdio.h> int transformTemprature(int F){ ...
- 《C程序设计语言》笔记(三)
六:结构 1:结构体声明中,比如: struct point{ int x; int y; }; struct后面的名字是可选的,称为结构标记.结构成员.结构标记和普通变量可以采用相同的名字,它们之间 ...
- 《C程序设计语言》(K&R)中文高清非扫描件
<C程序设计语言>(K&R)中文高清非扫描件(带书签目录) 对于某下载东西都要C币的网站无爱了.好不容易找了一个,发出来看会不会帮到别人 附上addr:https://pan. ...
- 《程序设计语言——实践之路(英文第三版)》【PDF】下载
<程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...
- C语言程序设计第六次作业——循环结构(2)
C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...
- 基于C#程序设计语言的三种组合算法
目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...
- K&R《C语言》书中的一个Bug
最近在重温K&R的C语言圣经,第二章中的练习题2-2引起了我的注意. 原题是: Write a loop equivalent to the for loop above without us ...
- awk程序设计语言之-awk基础
awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...
- 编程语言教程书该怎么写: 向K&R学习!
原文地址:Lax Language TutorialsAndrew Binstock 每年在评审Jolt Awards图书的时候,我都会被一些语言教程类图书弄得心力交瘁.从这些年的评审经验来看,这些语 ...
随机推荐
- JDK9之后 Eureka依赖
<!--Eureka添加依赖开始--> <dependency> <groupId>javax.xml.bind</groupId> <artif ...
- Oracle ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
转载☞:https://blog.csdn.net/qq_25221835/article/details/82762416 ROW_NUMBER 语法 语法格式:row_number() over( ...
- Acwing周赛分享
Acwing 周赛28 题面1 给定一个由大写字母构成的字符串 s,请计算其中有多少个子序列 QAQ. 注意,子序列不需要连续. 提示:本题数据范围较小,可以直接三重循环枚举三个字母的位置. 输入格式 ...
- C# LINQ之IEqualityComparer<>接口应用
在C#语言中,对集合的条件查询.分组统计等操作使用LINQ非常方便,LINQ的语法格式与SQL非常相似和便捷,而LINQ扩展方法配合Lambda更为简洁,如All.Any.Count.Max等Enum ...
- [WPF] 脱机环境实现支持拼音模糊搜索的AutoCompleteBox
AutoCompleteBox是一个常见的提高输入效率的组件,很多WPF的第三方控件库都提供了这个组件,但基本都是字符串的子串匹配,不支持拼音模糊匹配,例如无法通过输入ldh或liudehua匹配到刘 ...
- 使用maven搭建父工程与子工程
父/子工程的作用: 1.依赖管理 2.配置信息共享 3.模块化 4.版本控制 5.提高重用性可维护性 什么是dependencyManagement: maven中的一个元素,用于集中管理项目中的依赖 ...
- 《最新出炉》系列入门篇-Python+Playwright自动化测试-56- 多文件上传 - 下篇
1.简介 前边的两篇文章中,宏哥分别对input控件上传文件和非input控件上传文件进行了从理论到实践地讲解和介绍,但是后来又有人提出疑问,前边讲解和介绍的都是上传一个文件,如果上传多个文件,Pla ...
- 实现一个终端文本编辑器来学习golang语言
欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器. 首先想说说写这个系列文章的动机. 其实作为校招生加入某头部互联网大厂一转眼已经快4年了.可以说该大厂算是比较早的用gola ...
- 特斯拉在感知网络架构引入BEV三维空间转化层
Learnging Where To Look End-to-End
- NVIDIA显卡的利用率“Volatile GPU Util"是什么???
相关: CPU端多进程/多线程调用CUDA是否可以加速??? 如何实现nvidia显卡的cuda的多kernel并发执行??? ==================================== ...