尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
数据类型、引用与auto
数据类型、引用与autoC 在 C 类型系统上的扩展在 C 语言数据类型与变量 中我们学习了int、float、char等基本类型。C 完全保留了这些类型并在此基础上增加了bool、引用、auto等重要特性同时提供了类型安全的iostream输入输出。本篇聚焦 C 相对 C 的类型与 I/O 扩展整型、浮点、字符等基础内容请参阅 C 教程。一、C 基本数据类型回顾与扩展1.1 与 C 兼容的基本类型C 支持 C 的所有基本类型char、short、int、long、float、double等。用法与 C 相同。详细说明见 C 语言数据类型与变量。1.2 C 特有bool 类型C 内置布尔类型bool取值为true或false#includeiostreamintmain(){boolisReadytrue;boolisEmptyfalse;std::coutstd::boolalpha;// 输出 true/false 而非 1/0std::coutisReady: isReadystd::endl;std::coutisEmpty: isEmptystd::endl;intscore85;boolpassed(score60);std::coutpassed: passedstd::endl;return0;}对比CC布尔类型无用 int 0/1 模拟booltrue/false条件判断非零为真同左但 bool 语义更清晰二、引用Reference2.1 什么是引用引用是变量的别名——定义时必须初始化且之后不能绑定到其他对象#includeiostreamintmain(){intoriginal42;intreforiginal;// ref 是 original 的别名ref100;std::coutoriginal: originalstd::endl;// 100std::coutref: refstd::endl;// 100return0;}2.2 引用 vs 指针特性引用int指针int*初始化必须初始化可为空NULL/nullptr重新绑定不能可以指向其他对象解引用直接使用无需*需要*解引用空值不存在空引用可以 nullptr主要用途函数参数、返回值动态内存、可选值voidswap(inta,intb){inttempa;ab;btemp;}intmain(){intx1,y2;swap(x,y);// 直接修改 x、y无需传地址std::coutx, ystd::endl;// 2, 1return0;}指针的完整讲解见 C 语言指针。C 中优先用引用传递非空对象用指针表示可选或动态内存。2.3 const 引用不能通过 const 引用修改原对象常用于函数参数以避免拷贝voidprint(conststd::strings){std::coutsstd::endl;// s other; // 错误不能修改}三、auto 与类型推导C113.1 auto 关键字编译器根据初始化表达式自动推导类型#includeiostream#includevectorintmain(){autoi42;// intautod3.14;// doubleautosstd::string(hello);// std::stringstd::vectorintvec{1,2,3};for(autoitvec.begin();it!vec.end();it){std::cout*it ;}std::coutstd::endl;return0;}3.2 使用建议场景是否推荐 auto迭代器、复杂模板类型推荐简单整型、浮点可选显式类型更清晰函数返回值谨慎需确保可读性3.3 decltype获取表达式的类型常用于模板元编程intx0;decltype(x)y10;// y 的类型与 x 相同为 int四、const 与 constexpr4.1 const与 C 类似表示只读constintMAX_SIZE100;constdoublePI3.14159;4.2 constexprC11编译期常量值在编译时确定constexprintBUFFER_SIZE256;constexprintsquare(intn){returnn*n;}intmain(){intarr[square(5)];// 数组大小为 25编译期确定return0;}五、iostream 输入输出5.1 标准输出 cout#includeiostreamintmain(){intage25;doubleheight1.75;std::cout年龄agestd::endl;std::cout身高height 米std::endl;return0;}与 printf 对比特性printfcout类型安全需手动匹配格式符编译期检查语法printf(%d, x)cout x扩展性固定可重载5.2 标准输入 cin#includeiostreamintmain(){inta,b;std::cout请输入两个整数;std::cinab;std::cout和为abstd::endl;return0;}C 的scanf/printf在 C 中仍可用#include cstdio但推荐优先使用 iostream。5.3 常用操纵符#includeiostream#includeiomanipintmain(){doublepi3.14159265;std::coutstd::fixedstd::setprecision(2)pistd::endl;// 3.14std::coutstd::boolalphatruestd::endl;// truereturn0;}六、类型大小与 sizeof与 C 相同sizeof返回类型或变量占用的字节数#includeiostreamintmain(){std::coutsizeof(int): sizeof(int)std::endl;std::coutsizeof(bool): sizeof(bool)std::endl;std::coutsizeof(double): sizeof(double)std::endl;return0;}七、实战练习练习1引用交换编写void swap(int a, int b)在 main 中验证交换效果。练习2auto 推导声明多个auto变量用typeid或编译器推断确认其类型#includetypeinfo#includeiostreamintmain(){autox10;autoy3.14;std::couttypeid(x).name()std::endl;std::couttypeid(y).name()std::endl;return0;}练习3iostream 计算器用cin/cout实现两数加减乘除对比 C 版scanf/printf的实现。八、总结与延伸本节重点回顾C 保留 C 基本类型新增bool类型引用是别名必须初始化常用于函数参数避免拷贝auto让编译器推导类型简化复杂类型声明iostreamcout/cin提供类型安全的 I/O推荐替代 printf/scanfconstexpr用于编译期常量与函数下节预告下一篇将进入核心语法阶段《运算符与表达式C 扩展特性》学习 new/delete 等 C 运算符。延伸阅读C 语言数据类型与变量C 语言指针C 速查数据类型与引用知识点卡片booltrue/false引用T必须初始化是别名auto编译期类型推导const 引用const T用于只读参数输出std::cout x std::endl输入std::cin xC 基础类型用法见 C 教程C 增量重点在引用、bool、iostream小技巧函数参数中大对象用const T传递避免拷贝简单循环变量可写for (auto i 0; i n; i)⚠️注意事项引用必须初始化不能为空不要返回局部变量的引用或指针悬垂引用混用 cout 与 printf 时注意缓冲区刷新如果你对数据类型与引用有疑问欢迎在评论区留言下一篇见
RELATED

相关推荐

CORDIC算法与状态机实现:硬件三角函数计算的核心原理与实践

CORDIC算法与状态机实现:硬件三角函数计算的核心原理与实践

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。COS自动状态机这个名字听起来像是一个专门处理三角函数计算的状态机实现,结合热词里的CORDIC IP核和正弦波生成,它很可能是在FPGA或嵌入式场景下,用状态机的…

📅 2026/10/6 8:12:22
逆向美团外卖mtgsig 1.2签名算法:Python实现与风控对抗实战

逆向美团外卖mtgsig 1.2签名算法:Python实现与风控对抗实战

1. 项目概述:从一次失败的请求说起做爬虫或者数据采集的朋友,估计都遇到过美团外卖这个“硬骨头”。你可能兴致勃勃地写好了requests代码,模拟了headers,甚至把cookies都处理得妥妥当当,但一发送请求,返回的…

📅 2026/9/11 20:30:40
C++原子布尔类型std::atomic_bool:原理、内存序与并发实战

C++原子布尔类型std::atomic_bool:原理、内存序与并发实战

1. 项目概述在C多线程编程的世界里,数据竞争(Data Race)是程序员最常遇到也最头疼的“幽灵”之一。想象一下,两个线程同时去修改同一个银行账户的余额,一个在存钱,一个在取钱,如果没有正确的同步…

📅 2026/9/11 20:38:21
MORE NEWS

更多资讯

📰

启动报Port 8088 was already in use?先查是谁占的

启动报Port 8088 was already in use?先查是谁占的 项目启动报 Port 8088 was already in use,意思很直白:这个端口已经有人占了。 先说原理:端口是"门牌号",一间房只住一个进程 端口就是一台机器上的门牌号…

📰

担心文档上云?本地运行的办公AI才敢放心用

单位上周开了个会,主题是"AI 提效",散会时领导补了一句:涉及客户资料的文档,不许往云端传。这话一出,会议室里本来跃跃欲试的同事全蔫了——大家平时用的那些在线 AI,文档一上传就不知道存哪儿去…

📰

先能用,再好用:从烂尾复盘到两周上线,全栈项目的‘原型—快速迭代‘方法论

先能用,再好用:从烂尾复盘到两周上线,全栈项目的“原型—快速迭代”方法论 全栈学习路径的文章已经很多了:怎么选技术栈、怎么搭环境、怎么记文档,几乎每个方向都有人写。但一个更扎心的问题很少有人正面讨论——为什…

📰

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看‘会思考‘改写了哪些边界

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看“会思考”改写了哪些边界 一、先说结论:变强的不是“知识”,而是“解法” 每次新模型发布,评测榜单都会涨几个点,大…

📰

1.c++入门篇

1.c中的关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassext…

📰

《江灯合声》:有可行的分框版,也仍可以选择连续鸣谢

武汉江岸区栎坡合唱团在免费节目册《江灯合声》中,以表格集中鸣谢资助者。各家共同要求改为独立小框,团里仍想保留表格。现有全名与支持事项清楚可见,双方此前未承诺具体排版。我支持保留表格。补充的试排材料让选择更具体:分框能…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬