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图书的时候,我都会被一些语言教程类图书弄得心力交瘁.从这些年的评审经验来看,这些语 ...
随机推荐
- linux实现SSH免密登录设置,以及shell脚本实现
分享/朱季谦 最近在搭建linux集群,做了SSH免密登录的设置,正好把过程记录一下: 一.用搭建好的两台虚拟机做演示,A机器:192.168.200.129,B机器:192.168.200.128 ...
- css浅谈Flex布局
1.打开Flex布局 .box{ display: flex; } 2.容器的属性 flex-direction flex-wrap flex-flow justify-content align-i ...
- PHP集群session共享
集群的概念没有多复杂,其实就是多台电脑为了同一个目标在一起工作.在Web应用中,就是多个服务器提供一个站点的服务. 搭建PHP集群的第一步就是设置负载均衡. 默认情况下PHP是将session存在本地 ...
- 基于Java网络书店商城设计实现(源码+lw+部署文档+讲解等)
系统介绍: 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于网络书店商城当然也不能排除在外,随着网络技术的不断成熟,带动了网络书店商城,它彻底改变了过去传统 ...
- Day 5 - 双指针与折半搜索
双指针 本页面将简要介绍双指针. 引入 双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处. 双指针顾名思义,就是同时使用两个指针,在序列.链表结 ...
- wails实现腾讯元器bot
简单记录工具的一个模块 后端 Api调用 登录 腾讯元器 后创建智能体,按自己的需求来创建,发布后要等等审核. 等发布完成后点击调用api即可,这里可以看到user_id, assistant ...
- ngnix简介和基础
一.Nginx简介 Nginx 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器 是一个模块化软件 [1].安装nginx 使用源码包编译安装 cd /opt ...
- 【Java】Applet开发
一.Applet开发环境准备 IDEA在2018版本默认提供了Applet启动配置 创建一个Applet应用配置: 在IDEA2019版本之后,这个应用配置选项被移除了,改为Java Applet S ...
- 【转载】 tf.image.sample_distorted_bounding_box (为图像生成单个随机变形的边界框)
原文地址: https://blog.csdn.net/tz_zs/article/details/77920116 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...
- ubuntu22.04下安装nvidia-docker
首先需要保证docker engine已经安装成功,具体见: https://www.cnblogs.com/devilmaycry812839668/p/17269122.html ======== ...