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

C++ 入门核心语法|从 Hello World 到基础特性一次性吃透

文章目录前言一、C 第一个程序Hello World二、命名空间 namespace1. 为什么需要命名空间2. 命名空间定义规则3. 三种使用方式三、C 输入 输出1. 核心对象2. 最大优势四、缺省参数默认参数1. 定义2. 使用方式3. 声明与定义分离规则五、函数重载C 重要特性1. 定义2. 示例3. 与缺省函数某些情况矛盾六、 引用 C 最常用语法1 定义2. 引用三大特性3. 引用的用途4. const 引用权限问题5. 临时对象必须用 const 引用6. 引用 vs 指针高频面试七、inline 内联函数替代宏1. 作用2. 特点八、 nullptrC11 空指针1. 问题2.解决方案3. 与C的差异总结前言最近开始系统学习 C整理了一份超全的入门基础笔记专注新手最该掌握的知识点与核心语法适合零基础入门或快速复习直接干货奉上一、C 第一个程序Hello WorldC 完全兼容 CC程序能写过的在C上依旧可以通过两种写法都能跑// C风格#includestdio.hintmain(){printf(hello world\n);return0;}// C风格#includeiostreamusingnamespacestd;intmain(){couthello worldendl;return0;}注VS上要将后缀改为.cpp编译器才知道是C二、命名空间 namespace1. 为什么需要命名空间不知道大家在用C写程序的时候会不会遇到一个烦恼就是写了程序很长的时候一不小心就重定义了一个变量名或者函数名。而C为了避免这种情况引出了一个叫命名空间的概念。就是为了解决全局命名冲突、名字污染这种情况。C 语言项目中变量 / 函数名和库函数重名是常态会直接编译报错#includestdio.h#includestdlib.hintrand10;// 与库函数 rand 冲突intmain(){printf(%d\n,rand);// 编译报错return0;}但如果使用命名空间就不会出现问题#includestdio.h#includestdlib.hnamespacebit{intrand10;}intmain(){printf(%d\n,bit::rand);return0;}2. 命名空间定义规则namespace空间名{// 可定义变量、函数、类型intx;voidfunc(){}structNode{};}namespace 只能定义在全局可以嵌套定义多个文件同名命名空间会自动合并(命名空间可以跨文件使用不受文件限制注意包含头文件标准库都在 std 内因此在调用C标准库的时候必须使用std命名空间所以#includeiostream在编译时展开等价于namespacestd{//////标准库文件};3. 三种使用方式① 指定访问namespacebit{inta10;}intmain(){coutbit::aendl;}② 展开单个成员usingbit::a;coutaendl;③ 展开整个空间仅练习用usingnamespacebit;项目严禁展开整个 std极易冲突三、C 输入 输出头文件#includeiostream1. 核心对象cin标准输入键盘cout标准输出屏幕endl换行 刷新缓冲区流插入运算符流提取运算符2. 最大优势与C的输入输出的区别就是C里面提供的输入输出可以自动识别类型非常方便就省去占位符。自动识别变量类型不需要 %d、%f、%lf。inta;doubleb;charc;cinabc;couta b cendl;注虽然C的输入输出方便但在性能上也做出了牺牲会比C提供的输入输出更慢一点在竞赛时可能就有超时的风险且C的输入输出不好像C一样去控制格式综合来说有利也有弊。四、缺省参数默认参数1. 定义声明函数时给参数一个默认值调用不传参则使用默认值。2. 使用方式①全缺省voidFunc(inta10,intb20,intc30){couta b cendl;}② 半缺省重点必须从右往左连续缺省不能跳// 正确voidFunc(inta,intb10,intc20);// 错误voidFunc(inta10,intb,intc20);注调用缺省函数时只能从左向右依次给实参和半缺省对应3. 声明与定义分离规则缺省值只能写在声明里// Stack.hvoidSTInit(ST*ps,intn4);// Stack.cppvoidSTInit(ST*ps,intn){// ...}五、函数重载C 重要特性1. 定义同一作用域函数名相同参数不同 → 构成重载参数不同指类型不同个数不同类型顺序不同返回值不同不能构成重载2. 示例// 1. 类型不同intAdd(inta,intb);doubleAdd(doublea,doubleb);// 2. 个数不同voidf();voidf(inta);// 3. 顺序不同voidf(inta,charb);voidf(charb,inta);3. 与缺省函数某些情况矛盾#includeiostreamusing namespace std;voidf1(){coutf()endl;}voidf1(inta10){coutf(int a)endl;}intmain(){f1();// f()调⽤时会报错存在歧义编译器不知道调⽤谁return0;}解决方法将两个放在不同的命名空间中但放在不同的命名空间中就不是函数重载了#includeiostreamusing namespace std;namespace kind{voidf1(){coutf()endl;}};voidf1(inta10){coutf(int a)endl;}intmain(){kind::f1();return0;}六、 引用 C 最常用语法1 定义引用不是新定义⼀个变量而是给已存在变量取了⼀个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用同⼀块内存空间。比如水壶传中李逵宋江叫铁牛江湖上人称黑旋风林冲外号豹子头引用是变量的别名不开辟新空间和原变量共用同一块内存。底层还是使用指针实现但语法层面默认不开空间语法类型别名实体;示例inta10;intba;intcb;// 多级别名2. 引用三大特性定义时必须初始化一个变量可以有多个引用(一个人可以有多个小名一旦绑定不能改变指向inta10;intba;intc20;bc;// 这是赋值不是修改引用指向3. 引用的用途① 引用传参替代指针voidSwap(intrx,intry){inttmprx;rxry;rytmp;}② 引用返回值减少拷贝intSTTop(STrs){returnrs.a[rs.top];}可以直接修改返回值STTop(st) 10;可以理解为返回值就是返回一个常量数值不能修改原变量。返回引用就是返回原变量可以修改原变量。注不能返回局部变量的引用会变成类似空指针的东西4. const 引用权限问题权限可以缩小权限不能放大constinta10;// int ra a; // 错误权限放大constintraa;// 正确intb20;constintrbb;// 正确权限缩小注int这种形式就代表可读可写const int这种代表只读不写5. 临时对象必须用 const 引用常量表达式类型转换的结果会保存在⼀个临时对象中⽽C规定临时对象具有常性所以这里就触发了权限放⼤必须要⽤常引⽤才可以。所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象C中把这个未命名对象叫做临时对象constintr10;constintra*3;constintr12.34;6. 引用 vs 指针高频面试语法概念上引⽤是⼀个变量的取别名不开空间指针是存储⼀个变量地址要开空间。引用必须初始化指针不用引用不能改变指向指针可以引⽤可以直接访问指向对象指针需要解引⽤才是访问指向对象。指针很容易出现空指针和野指针的问题引⽤很少出现引⽤使⽤起来相对更安全⼀些sizeof(引用) 类型大小sizeof(指针) 4/8 字节七、inline 内联函数替代宏1. 作用替代 C 语言宏函数编译时在调用处展开无栈帧开销提高高频小函数效率。inlineintAdd(intx,inty){returnxy;}2. 特点inline 是编译器建议不是强制递归函数、代码长函数会被忽略声明与定义不能分离否则链接错误八、 nullptrC11 空指针1. 问题C 中 NULL 是 0重载函数会调用错误版本。voidf(intx){coutintendl;}voidf(int*ptr){coutint*endl;}f(NULL);// 调用 f(int)错误2.解决方案使用 nullptr专门表示空指针。f(nullptr);// 调用 f(int*)正确3. 与C的差异#includeiostreamusingnamespacestd;intmain(){inta0;double*sa;return0;}上述代码在C中能通过但在C不能因为C存在严格的类型判定连指针都要类型一致C中指针会发生隐式转换C中nullptr它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问提·。所以在C中都要将NULL改为nullptr。总结C中nullptr可以给予任意指针。void * 依旧可以接受任意指针。C中有严格的类型判定。总结namespace 解决命名冲突项目用 域::成员cin/cout 自动识别类型缺省参数从右往左连续给声明给缺省值函数重载看参数不看返回值引用是别名常用来传参、返回值权限可缩不可放inline 替代宏短小高频函数使用C11 空指针统一用 nullptr以上就是该篇博客的内容了如果内容存在不足请大佬多多包涵并不吝赐教会在写出优秀好文的路上努力拼搏达感谢支持一键三连。1感谢佬们的支持点赞关注收藏qwq感谢佬佬们↩︎

相关文章:

C++ 入门核心语法|从 Hello World 到基础特性一次性吃透

文章目录前言一、C 第一个程序:Hello World二、命名空间 namespace1. 为什么需要命名空间?2. 命名空间定义规则3. 三种使用方式三、C 输入 & 输出1. 核心对象2. 最大优势四、缺省参数(默认参数)1. 定义2. 使用方式3. 声明与定…...

半导体技术评估:如何判断新技术从概念到产品的“露点”

1. 开篇:从“露点”看半导体行业的虚实迷雾 大家好,我是Don Scansen。在半导体行业摸爬滚打了二十多年,从设计、验证到失效分析,几乎把产业链的各个环节都趟了一遍。今天,我想借这个新开的专栏,和大家聊聊一…...

德国工业4.0工程师指南:从系统融合到职业发展

1. 项目概述:为什么德国是工业工程师的理想目的地?如果你是一名工业、自动化或机器人领域的工程师,正在寻找一个能将你的技术抱负与前沿产业实践深度结合的职业舞台,那么德国很可能就是你一直在寻找的答案。这不仅仅是因为德国拥有…...

商业航天崛起:从SpaceX看工程创新与政策博弈的融合

1. 商业航天崛起的时代背景与技术逻辑2012年5月,当SpaceX的“龙”飞船与国际空间站成功对接时,我正和几位航天领域的同行在会议室里盯着直播画面。那一刻的安静与随后爆发的掌声,不仅仅是为一次技术成功,更是为一个新时代的开启感…...

从纸质手册到智能助手:技术会议应用如何重塑信息获取与时间管理

1. 从混乱到有序:技术会议体验的痛点与变革契机如果你参加过像国际电子器件会议(IEDM)或国际固态电路会议(ISSCC)这样的大型学术盛会,你肯定对那种“甜蜜的烦恼”深有体会。面对五六个并行进行的专题分会场…...

为什么你的Perplexity Science搜索总错过最新预印本?——基于arXiv/medRxiv/SSRN实时源的3层校验机制(含Python自动化脚本)

更多请点击: https://intelliparadigm.com 第一章:为什么你的Perplexity Science搜索总错过最新预印本?——基于arXiv/medRxiv/SSRN实时源的3层校验机制(含Python自动化脚本) Perplexity Science 依赖第三方索引快照…...

LocalChat:零门槛本地部署开源大语言模型,实现隐私安全的离线AI对话

1. 项目概述与核心价值如果你和我一样,对ChatGPT这类大语言模型的能力感到兴奋,但又对数据隐私、服务依赖和网络延迟心存顾虑,那么LocalChat这个项目可能就是为你量身打造的。简单来说,LocalChat是一个让你能在自己电脑上&#xf…...

家用扫地机器人研发技术路线

第四部分:如何一步步做出来 | 18个月 4阶段 从原型到量产 摘要:本文详细介绍了扫地机器人从原型到量产的研发流程,分为4个关键阶段。首先聚焦四大技术难点:SLAM定位、AI视觉识别、仿生机械臂和静音风机系统。研发过程包括实验室原型验证、工程样机测试、小批量真实场景测…...

为什么你的Gemini写作总像“AI腔”?资深技术文档架构师揭秘3层语义校准法

更多请点击: https://intelliparadigm.com 第一章:为什么你的Gemini写作总像“AI腔”?资深技术文档架构师揭秘3层语义校准法 Gemini 生成的技术文档常被诟病为“语法正确但语义失焦”——术语堆砌、逻辑断层、人机语感割裂。根本原因在于模…...

Cursor编辑器Markdown规则集:AI生成文档自动化格式规范指南

1. 项目概述:一个为 Cursor 编辑器定制的 Markdown 规则集 如果你和我一样,日常重度依赖 Cursor 这款 AI 驱动的代码编辑器,并且经常需要编写大量的技术文档、项目 README 或者技术博客,那你一定遇到过这样的痛点:AI …...

不止于仿真:用Multisim14.0的BUCK电路案例,手把手教你理解CCM/DCM模式与电感计算

从波形到公式:用Multisim 14.0解锁BUCK电路CCM/DCM模式的本质理解 当我们第一次翻开电力电子教材,那些关于BUCK电路工作模式的描述往往显得抽象而晦涩。"连续导通模式(CCM)"、"断续导通模式(DCM)"、"临界电感值"——这些概…...

SystemVerilog VPI动态数据处理机制与验证实践

1. SystemVerilog VPI动态数据处理机制深度解析在当今复杂的SoC验证环境中,SystemVerilog的动态数据类型已成为验证基础设施的核心组成部分。作为连接SystemVerilog与外部C/C程序的关键桥梁,VPI(Verilog Procedural Interface)的动态数据处理能力直接决定…...

刘教链|百万美刀的比特币:VanEck的预言与微策略的进化困境

BTC在8万刀附近磨了一周。就在市场踟蹰不前的时候,VanEck抛出一个大胆的预测[1]。一、VanEck的百万预言5月9日,VanEck的投资主管Matthew Sigel说了一番话。他认为比特币会在下一届美国总统任期结束前达到100万美刀[1],算下来大概是2031年前后…...

用STM32的TIM1和GPIO中断,手把手教你实现带霍尔BLDC的平稳启动与调速(附PID代码)

STM32实战:基于霍尔传感器的BLDC电机六步换相与PID调速全解析 在工业自动化、无人机和机器人等领域,无刷直流电机(BLDC)凭借其高效率、长寿命和低噪音特性成为首选驱动方案。本文将深入探讨如何利用STM32的TIM1高级定时器和GPIO中断实现带霍尔传感器的BL…...

5分钟快速上手:用FanControl打造你的Windows电脑静音散热系统

5分钟快速上手:用FanControl打造你的Windows电脑静音散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...

3步快速上手RobotHelper:安卓自动化脚本框架新手指南

3步快速上手RobotHelper:安卓自动化脚本框架新手指南 【免费下载链接】RobotHelper 安卓游戏自动化脚本框架|Automated script for Android games 项目地址: https://gitcode.com/gh_mirrors/ro/RobotHelper 你是否想要开发安卓游戏自动化脚本,却…...

终极Blender 3MF插件:如何快速实现3D打印文件的无缝转换

终极Blender 3MF插件:如何快速实现3D打印文件的无缝转换 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat是一款专为Blender设计的开源插件&a…...

从HEX到芯片:使用J-Flash实现高效固件烧录与生产级加密

1. 认识J-Flash:你的芯片烧录好帮手 第一次接触J-Flash时,我正为一个量产项目发愁——需要给500片GD32F103烧录固件。手动用IDE一个个烧?效率太低;找代工厂?成本太高。直到同事推荐了J-Flash,我才发现原来烧…...

基于 HM-TM32 红外摄像头:棉花燃烧+起火自动录制 30 秒视频

在棉花仓储、纺织原料监测等实际场景中,利用 HM-TM32 微型红外测温机芯实现非接触式火情监测具备极高的实用价值,本文基于 Windows 笔记本环境,实现红外摄像头实时画面显示,并在检测到棉花起火或高温异常时自动录制 30 秒视频留存…...

基于Twilio与ChatGPT构建AI电话助手:架构设计与实战指南

1. 项目概述:当ChatGPT遇上实体电话最近在折腾一个挺有意思的玩意儿,叫“ChatGPT-phone”。这名字听起来有点科幻,但说白了,它的核心目标就是让一个AI语音助手,比如ChatGPT,能够像真人一样接听和拨打电话。…...

Linux桌面美化:pixie-cursors鼠标指针主题安装与定制指南

1. 项目概述:一个为Linux桌面注入灵魂的鼠标指针主题如果你和我一样,是一个长期在Linux桌面环境下工作的开发者或爱好者,那么对于系统美化的追求,可能从未停止过。从窗口管理器到终端配色,从图标包到壁纸,每…...

使用remote2mac实现Windows远程开发macOS:VSCode SSH配置与优化指南

1. 项目概述与核心价值最近在折腾远程开发环境,特别是需要在不同操作系统间无缝切换时,遇到了一个挺典型的痛点:手头的主力开发机是Windows,但项目部署和测试环境往往是macOS或Linux服务器。传统的远程桌面方案要么延迟高得没法写…...

Axolotl与LLaMA-Factory对比:架构与扩展性分析-方案选型对比

1. 问题背景与选型目标 在大型语言模型(LLM)落地的浪潮中,“微调”已从少数研究团队的实验行为,变为大量中小企业甚至个人开发者的刚需。业务团队不再仅仅使用 API 调用闭源模型,而是希望基于开源基座模型(…...

AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告

更多请点击: https://intelliparadigm.com 第一章:AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告 Google Photos 近期将 Gemini Pro 1.5 深度集成至其搜索后端,支持…...

基于MCP协议构建垂直领域AI知识服务:猴头菇茶MCP服务器实战

1. 项目概述与核心价值最近在折腾AI Agent的开发,发现一个挺有意思的项目,叫jackrain19743/hou-tea-mcp-server。乍一看这个名字,可能会有点摸不着头脑,“hou-tea”是啥?其实这是一个基于Model Context Protocol&#…...

Exclusively Dark数据集:破解低光照视觉难题的7363张真实图像基准

Exclusively Dark数据集:破解低光照视觉难题的7363张真实图像基准 【免费下载链接】Exclusively-Dark-Image-Dataset Exclusively Dark (ExDARK) dataset which to the best of our knowledge, is the largest collection of low-light images taken in very low-li…...

浏览器端微信使用指南:告别繁琐安装,开启轻量沟通新时代

浏览器端微信使用指南:告别繁琐安装,开启轻量沟通新时代 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信PC版的庞大…...

ARM PMCCNTR寄存器:性能监控与时钟周期计数详解

1. ARM PMCCNTR寄存器深度解析在现代处理器架构中,性能监控单元(PMU)是系统调优和性能分析的关键组件。作为ARM架构性能监控的核心,PMCCNTR寄存器提供了精确的处理器时钟周期计数能力。这个64位寄存器在AArch32和AArch64执行模式下具有架构映射关系&…...

Cadence-OS深度解析:Uber Cadence增强发行版的生产实践指南

1. 项目概述与核心价值最近在梳理工作流自动化工具时,又翻出了paulophl94/cadence-os这个项目。它不是一个全新的轮子,而是基于 Uber 开源的 Cadence 工作流引擎,进行深度定制和增强的一个发行版。如果你正在为微服务架构下的复杂业务流程编排…...

技术栈选择的跟风陷阱:新潮技术与稳定性的平衡

在软件测试行业,技术迭代的速度如同飞驰的列车,新的测试框架、自动化工具、性能分析平台等层出不穷。从早期的Selenium到如今的Playwright,从JUnit到TestNG,再到新兴的Cypress、Pytest等,每一种新技术的出现都伴随着行…...