当前位置: 首页 > article >正文

C++变量与基本类型精解

《C Primer》第2章变量和基本类型核心内容详解本章是C编程的基石系统地讲解了构成程序的基本数据单元及其操作方式。以下通过表格和代码示例详细解析各核心知识点。1. 基本内置类型与类型转换C的基本内置类型包括算术类型整型、浮点型、字符型和特殊类型void。理解它们的尺寸和表示范围是正确选择数据类型的前提。类别类型含义典型尺寸/范围布尔型bool真/假值通常1字节true或false字符型char基本字符1字节8位wchar_t宽字符2或4字节char16_tUnicode字符2字节C11char32_tUnicode字符4字节C11整型short短整型至少16位int整型通常32位long长整型至少32位long long长整型至少64位C11浮点型float单精度通常6位有效数字double双精度通常10位有效数字long double扩展精度通常10位有效数字类型转换在混合类型运算或赋值时自动发生遵循特定规则。// 示例隐式类型转换 bool b 3.14; // b true非零值转为true int i b; // i 1true转为1 double d i; // d 1.0整型转浮点 unsigned u -1; // u 429496729532位系统负数转为大正数字面值常量的类型由后缀决定20 // 十进制int 020 // 八进制int值16 0x20 // 十六进制int值32 3.14 // double 3.14f // float 3.14L // long double a // char La // wchar_t u8hi // UTF-8字符串C112. 变量定义、初始化与作用域变量提供具名的存储空间其定义必须指定类型。// 多种初始化方式 int a 0; // 拷贝初始化传统方式 int b(0); // 直接初始化 int c {0}; // 列表初始化C11 int d{0}; // 列表初始化推荐防止窄化转换 auto e 0; // auto推导为int // 默认初始化行为差异 int global_var; // 全局变量默认初始化为0 void func() { int local_var; // 局部变量值未定义危险 static int static_local; // 静态局部变量默认初始化为0 }作用域规则全局作用域定义在所有函数之外程序整个执行期有效块作用域定义在{}内离开块后失效局部变量隐藏全局变量#include iostream int value 100; // 全局变量 int main() { int value 50; // 局部变量隐藏全局变量 std::cout value std::endl; // 输出50局部 std::cout ::value std::endl; // 输出100使用作用域运算符访问全局 return 0; }3. 复合类型引用与指针深度对比引用和指针是C中最重要的复合类型它们的区别和使用场景需要清晰掌握。特性引用指针本质对象的别名存储地址的对象初始化必须初始化可以不初始化危险绑定/指向绑定后不可更改可以改变指向的对象空值不能绑定到空可以指向nullptr多级没有引用的引用可以有指针的指针操作直接使用无需解引用需要*解引用// 引用示例本质是别名 int original 42; int ref original; // ref是original的别名 ref 100; // 修改ref就是修改original std::cout original; // 输出100 // 指针示例存储地址的对象 int var 42; int *ptr var; // ptr存储var的地址 *ptr 100; // 解引用ptr修改var的值 std::cout var; // 输出100 // 指针的灵活性 int x 10, y 20; int *p x; // p指向x p y; // p现在指向y引用不能这样做 p nullptr; // p不指向任何对象引用不能这样做 // 指向指针的指针 int val 42; int *p1 val; int **p2 p1; // p2是指向指针的指针 std::cout **p2; // 输出424. const限定符的层级与使用const限定符创建不可修改的对象与指针、引用结合时产生不同语义。// 基本const变量 const int MAX_SIZE 1024; // 必须初始化 // MAX_SIZE 2048; // 错误不能修改const变量 // const与引用对常量的引用 const int ci 100; const int r1 ci; // 正确引用和对象都是const // int r2 ci; // 错误不能用非const引用绑定const对象 // 特殊可以用const引用绑定字面值或表达式 const int r3 42; // 正确 const int r4 ci * 2; // 正确 // const与指针顶层const和底层const int num 10; const int *p1 num; // 底层const指向常量的指针指针指向的值不能改 // *p1 20; // 错误不能通过p1修改num p1 nullptr; // 正确p1本身可以改变指向 int *const p2 num; // 顶层const常量指针指针本身不能改 *p2 20; // 正确可以通过p2修改num // p2 nullptr; // 错误p2本身是常量 const int *const p3 num;// 既是顶层const也是底层const // *p3 30; // 错误底层const // p3 nullptr; // 错误顶层const // constexprC11编译时常量 constexpr int size 100; // 编译时确定 constexpr int scale 2 * size; // 编译时计算 constexpr int *np nullptr; // 指向整数的常量指针5. 类型处理工具别名、auto与decltype随着类型复杂化C提供工具简化类型处理。// 类型别名两种方式 typedef double wages; // 传统方式 typedef wages base, *p; // base是doublep是double* using Salary double; // C11别名声明更清晰 using pString char*; // pString是char*的别名 // 复杂类型的别名 typedef char *pchar; // pchar是char* const pchar cstr nullptr; // cstr是指向char的常量指针不是指向const char的指针 const char *cstr2 nullptr; // 这是指向const char的指针 // auto类型推导忽略顶层const保留底层const int i 0; const int ci i; auto a ci; // a是int忽略顶层const auto b i; // b是int* auto c ci; // c是const int*保留底层const // auto与引用 int ri i; auto d ri; // d是int引用被忽略 // auto在循环中的应用C11 std::vectorint vec {1, 2, 3, 4, 5}; for (auto it vec.begin(); it ! vec.end(); it) { std::cout *it ; // auto推导为std::vectorint::iterator } for (auto elem : vec) { // 范围for循环auto避免拷贝 elem * 2; // 修改原vector元素 } // decltype类型推导保留所有类型信息包括引用和顶层const const int ci2 0, cj ci2; decltype(ci2) x 0; // x是const int decltype(cj) y x; // y是const int必须初始化 // decltype与表达式 int i2 42, *p4 i2, r4 i2; decltype(r4) e i2; // e是int decltype(r4 0) f; // f是int表达式结果是右值 decltype(*p4) g i2; // g是int解引用操作产生引用 decltype((i2)) h i2; // h是int双层括号总是产生引用6. 自定义数据结构与头文件组织结构体和类是组织相关数据的核心机制头文件是组织代码的关键。// Sales_data.h 头文件 #ifndef SALES_DATA_H // 头文件保护防止重复包含 #define SALES_DATA_H #include string // 销售数据类定义 struct Sales_data { // 数据成员 std::string bookNo; // 书籍ISBN号 unsigned units_sold 0; // 销售数量类内初始值 double revenue 0.0; // 总收入类内初始值 // 成员函数声明 std::string isbn() const { return bookNo; } // 返回ISBN Sales_data combine(const Sales_data); // 合并销售记录 double avg_price() const; // 计算平均价格 }; // 非成员函数声明 Sales_data add(const Sales_data, const Sales_data); std::ostream print(std::ostream, const Sales_data); std::istream read(std::istream, Sales_data); #endif // SALES_DATA_H// Sales_data.cpp 实现文件 #include Sales_data.h // 成员函数定义 double Sales_data::avg_price() const { if (units_sold) return revenue / units_sold; else return 0.0; } Sales_data Sales_data::combine(const Sales_data rhs) { units_sold rhs.units_sold; revenue rhs.revenue; return *this; // 返回调用对象的引用 } // 非成员函数定义 Sales_data add(const Sales_data lhs, const Sales_data rhs) { Sales_data sum lhs; sum.combine(rhs); return sum; } std::ostream print(std::ostream os, const Sales_data item) { os item.isbn() item.units_sold item.revenue item.avg_price(); return os; } std::istream read(std::istream is, Sales_data item) { double price 0.0; is item.bookNo item.units_sold price; item.revenue item.units_sold * price; return is; }// main.cpp 使用示例 #include iostream #include Sales_data.h int main() { Sales_data total; double price; if (std::cin total.bookNo total.units_sold price) { total.revenue total.units_sold * price; Sales_data trans; while (std::cin trans.bookNo trans.units_sold price) { trans.revenue trans.units_sold * price; if (total.isbn() trans.isbn()) { total.combine(trans); // 合并相同ISBN的记录 } else { print(std::cout, total) std::endl; total trans; // 处理下一本书 } } print(std::cout, total) std::endl; // 打印最后一本书 } else { std::cerr No data?! std::endl; return -1; } return 0; }本章的关键在于理解类型决定了数据的含义和操作。正确选择和使用类型是编写正确、高效C程序的基础。复合类型特别是指针和引用是C灵活性的核心const提供了安全性保障而类型别名、auto和decltype则提高了代码的可读性和可维护性。自定义数据结构将相关数据组织在一起是面向对象编程的起点。参考来源《C Primer》导学系列第 2 章 - 变量和基本类型CPrimer Plus学习笔记CPrimer(第5版)学习笔记第2章-变量和基本类型cprimer 第2章 变量和基本类型Cprimer 第 2 章 变量和基本类型C Primer学习笔记 第二章~变量和基本类型

相关文章:

C++变量与基本类型精解

《C Primer》第2章(变量和基本类型)核心内容详解 本章是C编程的基石,系统地讲解了构成程序的基本数据单元及其操作方式。以下通过表格和代码示例,详细解析各核心知识点。 1. 基本内置类型与类型转换 C的基本内置类型包括算术类…...

MATLAB翼型分析终极指南:5步掌握XFOILinterface高效气动计算

MATLAB翼型分析终极指南:5步掌握XFOILinterface高效气动计算 【免费下载链接】XFOILinterface 项目地址: https://gitcode.com/gh_mirrors/xf/XFOILinterface 还在为复杂的翼型气动分析而烦恼吗?想在MATLAB环境中轻松调用专业的XFOIL计算引擎吗&…...

marketingskills实验团队结构:构建高效测试团队的最佳实践

marketingskills实验团队结构:构建高效测试团队的最佳实践 【免费下载链接】marketingskills Marketing skills for Claude Code and AI agents. CRO, copywriting, SEO, analytics, and growth engineering. 项目地址: https://gitcode.com/GitHub_Trending/mar/…...

如何在MATLAB中快速进行翼型气动分析:5步完整教程

如何在MATLAB中快速进行翼型气动分析:5步完整教程 【免费下载链接】XFOILinterface 项目地址: https://gitcode.com/gh_mirrors/xf/XFOILinterface 想要在MATLAB环境中轻松完成专业的翼型气动性能分析吗?XFOILinterface项目为您提供了完美的解决…...

Windows苹果触控板原生体验终极指南:mac-precision-touchpad驱动深度解析

Windows苹果触控板原生体验终极指南:mac-precision-touchpad驱动深度解析 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-pre…...

python aiohttp

### 聊聊 Python 的 aiohttp:一个写异步 HTTP 的家伙 作为 Python 开发者,平常写网络请求,最头疼的是啥?等 响应 的时候,程序卡在那儿,啥也干不了。十年前,大部分人会甩一句“用 gevent 啊”&am…...

从Bose到恒玄:ANC芯片发展简史与国产化如何让降噪耳机‘白菜价’

从Bose到恒玄:ANC芯片技术演进与消费电子平民化革命 1989年,当Bose推出首款商用主动降噪耳机时,这款定价近千美元的产品仅出现在飞行员驾驶舱和高端商务人士的旅行包中。三十年后,中国消费者已经可以在电商平台用不到200元人民币购…...

FLUX.1-Krea开源大模型:开发者可复现——种子值与生成结果强关联

FLUX.1-Krea开源大模型:开发者可复现——种子值与生成结果强关联 1. FLUX.1-Krea-Extracted-LoRA 真实感图像生成模型v1.0 FLUX.1-Krea-Extracted-LoRA 是一个专为真实感图像生成设计的开源模型,它通过独特的LoRA风格权重注入技术,显著提升…...

每日安全情报报告 · 2026-04-25

每日安全情报报告 2026-04-25 发布时间:2026-04-25 12:53 CST 情报周期:2026-04-24 ~ 2026-04-25 风险概览:🔴 高危漏洞 5 项 | 🟠 在野利用 4 项 | 🟡 PoC 公开 2 项 | 📰 安全事件…...

6大维度深度剖析:Jar Analyzer如何重构Java代码审计体验

6大维度深度剖析:Jar Analyzer如何重构Java代码审计体验 【免费下载链接】jar-analyzer Jar Analyzer - 一个 JAR 包 GUI 分析工具,方法调用关系搜索,方法调用链 DFS 算法分析,模拟 JVM 的污点分析验证 DFS 结果,字符串…...

7.css部署指南:从开发到生产的完整工作流程

7.css部署指南:从开发到生产的完整工作流程 【免费下载链接】7.css A JS-independent, tree-shakeable CSS framework for building faithful recreations of the Windows 7 UI. 项目地址: https://gitcode.com/gh_mirrors/7c/7.css 7.css是一个独立于JavaSc…...

MacBook电池终极保养指南:如何用AlDente延长电池寿命3倍

MacBook电池终极保养指南:如何用AlDente延长电池寿命3倍 【免费下载链接】AlDente-Battery_Care_and_Monitoring Menubar Tool to set Charge Limits and Prolong Battery Lifespan 项目地址: https://gitcode.com/gh_mirrors/al/AlDente-Battery_Care_and_Monito…...

如何用UnityFigmaBridge实现设计开发高效协作的完整解决方案

如何用UnityFigmaBridge实现设计开发高效协作的完整解决方案 【免费下载链接】UnityFigmaBridge Easily bring your Figma Documents, Components, Assets and Prototypes to Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityFigmaBridge UnityFigmaBridge是一…...

别再用相关性分析了!用Python的sklearn随机森林搞定环境因子与生物的非线性关联

用随机森林破解环境因子与生物指标的复杂关联:Python实战指南 当你在环境科学或生态学研究中遇到一堆温度、pH值、污染物浓度等环境因子数据,以及对应的生物指标测量结果时,传统的皮尔逊相关分析往往显得力不从心。这些方法只能捕捉线性关系&…...

LiquidAI LFM2-2.6B-GGUF部署教程:无GPU环境纯CPU推理性能实测(vs Qwen2-1.5B)

LiquidAI LFM2-2.6B-GGUF部署教程:无GPU环境纯CPU推理性能实测(vs Qwen2-1.5B) 1. 模型简介 LFM2-2.6B-GGUF是由Liquid AI公司开发的大语言模型,经过GGUF量化后特别适合在资源受限的设备上运行。这个2.6B参数的模型在保持良好性…...

从‘板子坏了’到成功出图:一个ESP32-CAM小白的真实排错心路与代码配置详解

从‘板子坏了’到成功出图:一个ESP32-CAM小白的真实排错心路与代码配置详解 第一次点亮ESP32-CAM开发板时,我盯着屏幕上不断滚动的红色报错信息,手指无意识地敲打着桌面。作为物联网专业的学生,我本以为按照教程一步步操作就能轻松…...

5分钟精通MDCx Docker容器化部署:从零到生产环境的最佳实践

5分钟精通MDCx Docker容器化部署:从零到生产环境的最佳实践 【免费下载链接】mdcx-docker 在Docker容器中运行 MDCX,并通过Web界面或远程桌面进行控制。Run MDCX in a Docker container, accessible and controllable via a web interface or remote de…...

快速入门@pmndrs/racing-game:10分钟搭建你的第一个React 3D赛车游戏

快速入门pmndrs/racing-game:10分钟搭建你的第一个React 3D赛车游戏 【免费下载链接】racing-game 🏎 Open source racing game developed by everyone willing 项目地址: https://gitcode.com/gh_mirrors/ra/racing-game pmndrs/racing-game是一…...

【实战指南】龙芯2K1000开发板:从零到一,快速上手全功能测试

1. 龙芯2K1000开发板开箱与硬件组装 第一次拿到迅为iTOP龙芯2K1000开发板时,包装盒里整齐排列的配件让我这个嵌入式老手也眼前一亮。作为国产处理器的代表作,这块开发板确实在硬件配置上下了功夫。我们先来清点标配配件:12V电源适配器、232串…...

2026最新!3款亲测实用会议纪要录音转文字神器,免费好用到哭效率提升10倍!

刚开完3小时项目会,散会老板甩一句“今天纪要下班前给我”。翻笔记漏了一半核心需求,对着录音拖进度条逐句听,一下耗到深夜。采访完嘉宾,1小时录音整理要花3小时,本来接活赚的钱全赔在时间上。上课记笔记,只…...

KrkrzExtract技术解析:krkrz引擎资源解包解决方案架构与实践

KrkrzExtract技术解析:krkrz引擎资源解包解决方案架构与实践 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract是一款专为krkrz游戏引擎设计的资源解包工具&#x…...

ChatGPT Images 2.0 功能大提升,但测试中仍出现这些错误!

1. ZDNET 的关键观点是什么? ChatGPT Images 2.0 能生成准确的文本和可用的图形,还能匹配包括 ZDNET 视觉风格在内的品牌样式,但仍会出现错误,需要人工审核。本周早些时候,OpenAI 推出了其全新的图像生成引擎 ChatGPT …...

rtop编译与安装指南:从源码到可执行文件的完整流程

rtop编译与安装指南:从源码到可执行文件的完整流程 【免费下载链接】rtop rtop is an interactive, remote system monitoring tool based on SSH 项目地址: https://gitcode.com/gh_mirrors/rt/rtop rtop是一款基于SSH的交互式远程系统监控工具,…...

MATLAB翼型分析终极指南:用XFOILinterface快速完成气动性能计算

MATLAB翼型分析终极指南:用XFOILinterface快速完成气动性能计算 【免费下载链接】XFOILinterface 项目地址: https://gitcode.com/gh_mirrors/xf/XFOILinterface 在航空航天工程和流体力学研究中,翼型气动性能分析是一个基础而关键的任务。传统上…...

3步掌握AudioSep音频分离:用自然语言精准提取任何声音

3步掌握AudioSep音频分离:用自然语言精准提取任何声音 【免费下载链接】AudioSep Official implementation of "Separate Anything You Describe" 项目地址: https://gitcode.com/gh_mirrors/au/AudioSep AudioSep是一款革命性的音频分离工具&…...

Speechless:免费Chrome插件帮你永久保存微博记忆的终极方案

Speechless:免费Chrome插件帮你永久保存微博记忆的终极方案 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 你是否曾经担心过&#xff0c…...

告别复杂后期!用OpenVINO AI插件让Audacity一键分离人声与伴奏 [特殊字符]

告别复杂后期!用OpenVINO AI插件让Audacity一键分离人声与伴奏 🎵 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plu…...

Jadx日志级别参数终极指南:从崩溃到从容的Android反编译体验优化

Jadx日志级别参数终极指南:从崩溃到从容的Android反编译体验优化 【免费下载链接】jadx Dex to Java decompiler 项目地址: https://gitcode.com/gh_mirrors/ja/jadx Jadx作为一款强大的Dex to Java反编译工具,在Android应用逆向工程中扮演着重要…...

手把手教你从微软商店和手动下载两种方式安装WSL,并彻底卸载清理旧版本(避坑指南)

深度掌控WSL:从多路径安装到彻底清理的完整指南 在Windows系统上运行原生Linux环境的需求日益增长,无论是开发者需要搭建一致的开发环境,还是运维人员希望在不切换系统的情况下管理Linux服务器,Windows Subsystem for Linux&…...

Phi-mini-MoE-instruct开源模型价值:非商业/商业双许可,支持私有化定制与白标交付

Phi-mini-MoE-instruct开源模型价值:非商业/商业双许可,支持私有化定制与白标交付 1. 模型概述与核心价值 Phi-mini-MoE-instruct是一款轻量级混合专家(MoE)指令型小语言模型,采用创新的双许可模式,同时支…...