C Primer Plus——第三章 数据和C
本章介绍C语言中数据的表示方式包括变量与常量、基本数据类型、存储方式及类型相关的操作。一、示例程序先看一个使用不同数据类型的简单程序#include stdio.h int main(void) { int num 100; // 整型 float pi 3.14159f; // 单精度浮点型 char ch A; // 字符型 double large 1.23e12; // 双精度浮点型 printf(整数: %d\n, num); printf(浮点数: %.5f\n, pi); printf(字符: %c (ASCII %d)\n, ch, ch); printf(科学计数: %e\n, large); return 0; }通过这个程序可以直观看到几种基本数据类型的声明和使用方式。二、变量与常量数据变量程序中用来存储数据的命名存储区域其值在运行过程中可以改变。必须先声明后使用声明时确定类型和名称可选初始化。int count 0;常量数据程序运行期间值不能改变的量。字面常量直接写出的数值如100、3.14、A符号常量使用#define或const定义如#define PI 3.14159或const double PI 3.14159;三、数据数据类型关键字概览C语言通过数据类型关键字来定义变量的类型主要分为以下几类基本类型关键字int、long、short、unsigned、signed、char、float、double、_Bool复数与虚数类型很少直接使用_Complex、_Imaginary类型修饰与扩展signed、unsigned、short、long可以和int、char组合产生变体。这些关键字决定了数据在内存中的存储方式和占用空间。3.1 计算机存储方式整数与浮点数位bit最小的存储单元可以存储0或1。字节Byte最常用的计算机存储单位1字节 8位。字Word计算机设计的自然存储单位通常为16位、32位或64位取决于体系结构。3.2 整数存储整数以二进制补码形式存储能精确表示其范围内的每一个值。3.3 浮点数存储浮点数被分成符号位、指数部分和尾数部分来存储遵循IEEE 754标准。浮点数在表示很大或很小的数时非常有优势但不能精确表示所有实数算术运算时可能产生舍入误差。四、C语言基本数据类型4.1int类型有符号整数通常占用一个机器字长现今多为32位或64位。声明示例int age;或int year 2026;打印用%d输出十进制整数。八进制和十六进制输出%o八进制不带前缀。%x或%X十六进制不带前缀。若想显示前缀使用%#o显示0、%#x显示0x或%#X显示0X。int num 255; printf(十进制: %d\n, num); // 255 printf(八进制: %#o\n, num); // 0377 printf(十六进制: %#x\n, num); // 0xff4.2 其他整数类型C语言提供多种整数变体以适应不同范围需求类型含义常见大小位打印格式十进制short int或short短整型16%hdlong int或long长整型32/64%ldlong long int长长整型64%lldunsigned int无符号整型与int相同%uunsigned short无符号短整型16%huunsigned long无符号长整型32/64%luunsigned long long无符号长长整型64%llu使用注意事项C标准只规定了各类型最小允许范围具体大小由实现决定。可借助sizeof获取字节数。在long和int占用空间相同的平台上若希望代码可移植应使用long来存储可能超过int范围的数。长整数常量后缀L或l如100L表示long类型LL表示long long。也可用于八进制或十六进制常量。无符号常量后缀U或u可与L组合如100UL表示unsigned long。溢出问题有符号整数溢出属于未定义行为无符号整数溢出会回绕取模。打印八进制或十六进制长整型%lo、%lxshort类型八进制用%ho。long long big 1234567890123LL; printf(%lld\n, big); unsigned long ul 4000000000UL; printf(%lu\n, ul);4.3char类型用于存储字符但实际上存储的是字符对应的数值ASCII码或扩展编码。占用1字节8位。字符常量用单引号括起来如A、9、$。字符是以数值形式存储的A在ASCII中对应整数65。C将字符常量视为int类型。打印字符用%c输出字符本身也可用%d输出其对应的整数编码。char c A; printf(字符: %c, 编码: %d\n, c, c); // 输出: 字符: A, 编码: 65有符号/无符号char默认可能是有符号或无符号由编译器决定。显式声明可用signed char通常范围-128~127和unsigned char0~255。非打印字符一些控制字符无法直接输入使用转义序列表示。常用转义序列如下转义序列含义ASCII值十进制\a警报响铃7\b退格8\f换页12\n换行10\r回车13\t水平制表9\v垂直制表11\\反斜杠92\单引号39\双引号34\0oo八进制值oo为1~3位八进制数字—\xhh十六进制值hh为1~2位十六进制数字—示例printf(第一行\n第二行\t缩进后\a警告声); char single_quote \; char backslash \\; printf(%c %c, single_quote, backslash);关于\a“活跃位置”指显示设备上下一个字符将出现的位置\a触发警报声但不改变活跃位置即不移动光标。字符串用双引号括起来的字符序列无需单引号。例如Hello, World!。4.4_Bool类型C99引入的布尔类型只能存储值0假或1真。若包含stdbool.h头文件可直接使用bool、true、false。_Bool flag 1; #include stdbool.h bool done false;任何非零值赋值给_Bool变量都会被转换为1。4.5 可移植类型stdint.h 和 inttypes.h为了解决各平台整数大小不一致问题C99引入了精确宽度整数类型定义在stdint.h中。它们是可选的如果平台不支持则不会定义。常见类型精确宽度int32_t、uint16_t等。最小宽度int_least8_t至少8位、int_least32_t等。快速宽度int_fast16_t等追求运算速度。最大宽度intmax_t、uintmax_t。打印这些类型时使用inttypes.h中定义的字符串宏。例如PRId32是打印int32_t的格式说明符。#include inttypes.h int32_t val 1000; printf(% PRId32 \n, val); // 输出 10004.6 浮点型float、double、long doublefloat单精度通常4字节有效数字约6-7位。double双精度通常8字节有效数字约15-16位。long double扩展精度依赖实现。浮点型常量默认以double类型存储。若希望指定为float添加后缀f或Flong double加l或L。科学计数法-1.56E12表示 -1.56×10¹²87e-3表示 0.087。十六进制浮点常量C990xa.1fp10。a.1f十六进制对应十进制 10 1/16 15/256乘以 2¹⁰ 即1024。float f 3.14f; double d 2.718281828; long double ld 1.23456789L; printf(%.10f %.10f %.10Lf\n, f, d, ld);4.7 复数与虚数类型C99引入了复数算术的支持若编译器实现包含类型float _Complex、double _Complex、long double _Complex以及可选的关键字_Imaginary。在包含complex.h后可用complex宏及I表示虚数单位。实际编程中较少直接使用多用于数值计算领域。4.8 其他类型void无类型主要用于函数返回、函数参数、通用指针。enum枚举类型定义命名整数常量。派生类型数组、指针、结构体、联合体等。4.9 类型大小sizeof运算符sizeof以字节为单位给出指定类型或变量的大小。语法sizeof(类型)或sizeof 变量返回size_t类型通常用%zu打印。printf(int: %zu 字节\n, sizeof(int)); printf(double: %zu 字节\n, sizeof(double)); int a; printf(a: %zu 字节\n, sizeof a);五、使用数据类型类型转换与赋值把浮点数赋给整数变量时直接丢弃小数部分不进行四舍五入只保留整数部分。int i 3.99; // i 的值为 3不同类型数值在运算时会进行隐式类型转换通常向更高级别提升如int→double。强制类型转换(类型)表达式如(int)3.99结果为3。六、参数匹配与陷阱使用printf和scanf时参数必须与格式字符串中的占位符严格匹配否则会产生未定义行为类型不符如用%d打印long可能导致输出错误或崩溃。参数数量与占位符不一致也会出现问题。编译器可能不会检查这些错误需程序员格外小心。七、转义序列示例与缓冲区刷新7.1 程序运行情况下面的程序展示了部分转义序列的效果#include stdio.h int main(void) { printf(AB\bC\n); // 输出 A C? (退格将B擦除可能显示为 AC) printf(12345678\rABCD\n);// 输出 ABCD5678? (回车回到行首覆盖1234) printf(Alert sound\a\n); // 发出警告声 return 0; }实际输出可能因终端而异。7.2 刷新输出printf默认将输出发送到缓冲区然后根据一定条件将缓冲区内内容刷新flush到屏幕。缓冲区的刷新时机缓冲区满。遇到换行符\n行缓冲模式下。程序正常结束。需要输入时如scanf之前输出会被刷新。显式调用fflush(stdout)。为了确保信息立即显示可在必要处使用换行符或fflush。八、关键概念ASCII码American Standard Code for Information Interchange用数值表示字符的标准编码方案。标准ASCII使用7位编码可表示128个字符0~127。例如0为48A为65a为97。C语言char类型通常基于ASCII或扩展编码如Latin-1、UTF-8起始段处理字符。理解字符与数字的对应关系是掌握C语言输入输出和字符串处理的基础。总结数据以变量或常量的形式存储变量需声明类型。常用基本类型int、char、float、double以及它们的修饰变体。字符通过ASCII码存储转义序列表示特殊字符。sizeof用于确定类型大小类型转换需注意精度损失。格式化输出时注意占位符与参数匹配了解缓冲区刷新机制有助于控制输出时序。

相关新闻

异构计算编程模型与性能优化实战指南

异构计算编程模型与性能优化实战指南

1. 异构计算为何成为高性能计算的必选项? 十年前我第一次接触超级计算机时,整个机房摆满了清一色的x86服务器。如今再走进任何超算中心,映入眼帘的必定是CPU、GPU、FPGA等各类计算单元组成的异构集群。这种转变背后是半导体工艺逼近物理极限后…

2026/10/13 0:11:12 阅读更多 →
FIFA 23实时编辑器深度指南:5大进阶技巧打造完美足球世界

FIFA 23实时编辑器深度指南:5大进阶技巧打造完美足球世界

FIFA 23实时编辑器深度指南:5大进阶技巧打造完美足球世界 【免费下载链接】FIFA-23-Live-Editor FIFA 23 Live Editor 项目地址: https://gitcode.com/gh_mirrors/fi/FIFA-23-Live-Editor FIFA 23实时编辑器是一款革命性的开源内存修改工具,专为追…

2026/10/13 12:01:49 阅读更多 →
MySQL 8.0.31 生产环境部署全攻略:从安装到安全加固

MySQL 8.0.31 生产环境部署全攻略:从安装到安全加固

1. 项目概述:为什么MySQL 8.0.31值得你亲手部署一次? 最近在帮几个朋友的公司做数据库环境标准化,发现一个挺有意思的现象:很多人还在用着MySQL 5.7,甚至更老的版本,一提到升级到8.0就有点发怵。其实&#…

2026/10/13 12:01:53 阅读更多 →

最新新闻

Qt Linux打包失败原因与linuxdeployqt避坑指南

Qt Linux打包失败原因与linuxdeployqt避坑指南

简介:本资源是一份面向Linux Qt开发者的技术实践指南,聚焦Ubuntu环境下使用linuxdeployqt工具完成Qt程序跨机部署的核心痛点。针对无Qt运行环境的目标机器,系统性梳理了从Qt开发环境配置、linuxdeployqt源码编译(含Ubuntu 18.04兼…

2026/10/14 4:46:57 阅读更多 →
开放权重模型:可控部署、商用微调与硬件感知推理实战

开放权重模型:可控部署、商用微调与硬件感知推理实战

1. 项目概述:一场被公开谈论的“开放权重”战略卡位战最近刷到一条消息,说英伟达正在和一家叫 Reflection AI 的初创公司洽谈收购或追加投资——这事本身不稀奇,大厂盯上潜力股是常态。但真正让我多看了两眼的,是它背后那个反复出…

2026/10/14 4:46:57 阅读更多 →
Linux系统工具pstack二进制瘦身实战:ELF优化与C语言编译精简

Linux系统工具pstack二进制瘦身实战:ELF优化与C语言编译精简

1. 一个被低估的系统工具&#xff1a;pstack 的“瘦身”为什么值得较真很多人第一次听说 pstack&#xff0c;是在某个进程卡死、CPU 疯狂打满、日志毫无输出的深夜。运维同事甩来一句&#xff1a;“快&#xff0c;pstack 看下堆栈&#xff01;”——于是你敲下pstack <pid&g…

2026/10/14 4:46:57 阅读更多 →
PS5数据管理方案:AnyPS5搞定存档备份与远程串流

PS5数据管理方案:AnyPS5搞定存档备份与远程串流

1. 为什么需要AnyPS5方案PS5入手之后&#xff0c;很多玩家都会遇到同一个问题&#xff1a;主机硬盘看着不小&#xff0c;真用起来却总是捉襟见肘。一款大型游戏动辄上百GB&#xff0c;加上截图、录像、存档备份&#xff0c;内置SSD没过多久就亮红灯。更麻烦的是&#xff0c;一旦…

2026/10/14 4:46:57 阅读更多 →
实时事件分析系统架构设计与Flink+Kafka+ClickHouse实战

实时事件分析系统架构设计与Flink+Kafka+ClickHouse实战

1. 从“rea”这个标题说起&#xff1a;一个被低估的缩写背后藏着什么第一次看到“rea”这个标题的时候&#xff0c;我脑子里蹦出来的第一反应是——这大概率又是一个被缩写玩坏的项目名。做技术的人都有个通病&#xff0c;喜欢把长名字砍成三四个字母&#xff0c;仿佛名字越短越…

2026/10/14 4:46:57 阅读更多 →
一文搞懂MySQL socket连接:原理、配置与2002/2003故障排查

一文搞懂MySQL socket连接:原理、配置与2002/2003故障排查

一次线上事故让我把socket连接这件事彻底搞明白了。当时某个项目组反馈所有本地应用突然连不上MySQL&#xff0c;我登录服务器一看&#xff0c;mysqld进程明明活着&#xff0c;3306端口也在正常监听&#xff0c;可本地应用全部报socket错误。查了半个多小时&#xff0c;最后发现…

2026/10/14 4:45:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →