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

C++初阶:入门基础

1.C的第一个程序C兼容C语言绝大多数的语法所以C语言实现的hello world依旧可以运行C中需要把定义文件代码后缀改为.cpp//C兼容C语言#includestdio.hintmain(){printf(hello world\n);return0;}当然C也有一套自己的输入输出有自己的语法严格来说C版本的hello world是这样写的//C#includeiostreamusingnamespacestd;intmain(){couthello worldendl;return0;}那这里的iostream是什么呢using namespace std又是什么呢下面我们一一讲解。2.命名空间2.1 namespace的价值在C和C中变量函数和类都是大量存在的这些变量函数类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。C语言项目类似下面程序这样的命名冲突是普遍存在的问题C引入namespace就是为了更好的解决这样的问题。#includestdio.h#includestdlibintran10;intmain(){// 编译报错error C2365: “rand”: 重定义以前的定义是“函数”printf(%d\n,rand);return0;}2.2 namespace的定义1.定义命名空间需要用到namespace关键字后面跟着命名空间的名字这个名字是要自己定义的名字后面接上一对{}即可{}中即为命名空间的成员命名空间的成员可以是变量函数类型等。2.namespace本质是定义出一个域这个域跟全局域局部域各自独立谁都不影响谁也就是说我在全局域中定义一个rand函数在自己定义的namespace域中定义一个rand函数这两个函数是独立的谁都不影响谁。3.C中域有函数全局域局部域命名空间域类域。域影响的是编译时语法查找一个变量/函数/类型的出处的逻辑所以有了域隔离名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑还会影响变量的生命周期命名空间域和类域不会影响变量的生命周期。4.namespace只能定义在全局也可以嵌套定义。5.项目工程中多文件定义同名的namespace会认为是一个namespace,不会冲突。6.C标准库都放在一个叫std的命名空间中。下面举一些例子#includeiostreamusingnamespacestd;//定义一个命名空间域namespacehbw{//定义变量intrand10;//定义函数intAdd(inta,intb){returnab;}//定义类型structhan{inta;structhan*next;}intmain(){//这里默认访问的是全局的rand函数指针(标准库里有一个rand函数)printf(%p\n,rand);//这里指定hbw命名空间的randptintf(%d\n,hbw::rand);return0;}2.3命名空间的使用我们先看一下下面这个程序会不会报错.#includeiostreamusingnamespacestd;namespacehbw{inta1;intb0;}intmain(){printf(%d\n,a);return0;}上面这个程序是有问题的我们会疑惑上面我定义了a变量为什么还会报错原因是编译查找一个变量的声明/定义时默认只会在局部域或者在全局域查找不会到命名空间里面去查找。所以我们要使⽤命名空间中定义的变量/函数有三种⽅式1.指定命名空间访问项⽬中推荐这种⽅式。2.using将命名空间中某个成员展开项⽬中经常访问的不存在冲突的成员推荐这种⽅式。3.展开命名空间中全部成员项⽬不推荐冲突⻛险很⼤⽇常⼩练习程序为了⽅便推荐使⽤。3.C输入和输出1.是input output stream的缩写是标准的输入输出流库定义了标准的输入输出对象。2.std::cin是istream类的对象它主要面向窄字符的标准输入流。3.std::cout是ostream类的对象它主要面向窄字符的标准输出流。4.std::endl是一个函数流插入输出时相当于插入一个换行加刷新缓冲区。5.是流插入运算符是流提取运算符。6.cout/cin/endl等都属于C标准库C标准库都放在⼀个叫std(standard)的命名空间中所以要通过命名空间的使⽤⽅式去⽤他们。如using namespace std这样去使用。4.缺省参数1.缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时如果没有指定实参则采⽤该形参的缺省值否则使⽤指定的实参缺省参数分为全缺省和半缺省参数。有些地⽅把缺省参数也叫默认参数。2.全缺省就是全部形参给缺省值半缺省就是部分形参给缺省值。C规定半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值。3.带缺省参数的函数调⽤C规定必须从左到右依次给实参不能跳跃给实参。4.函数声明和定义分离时缺省参数不能在函数声明和定义中同时出现规定必须函数声明给缺省值。#includeiostreamusingnamespacestd;voidfunc(inta0){coutaendl;}intmain(){func();//没有传参时使用参数的默认值就是0func(1);//传参时使用指定的实参就是1return0;}5.函数重载C⽀持在同⼀作⽤域中出现同名函数但是要求这些同名函数的形参不同可以是参数个数不同或者类型不同。这样C函数调⽤就表现出了多态⾏为使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同名函数的。#includeiostreamusingnamespacestd;//1.参数类型不同intAdd(intleft,intright){coutint Add(int left, int right)endl;returnleftright;}doubleAdd(doubleleft,doubleright){coutdouble Add(double left, double right)endl;returnleftright;}//2.参数个数不同voidf(){coutf()endl;}voidf(inta){coutf(int a)endl;}//3.参数类型顺序不同voidf(inta,charb){coutf(int a,char b)endl;}voidf(charb,inta){coutf(char b, int a)endl;}下面两个函数也构成重载但是调用时会报错因为存在歧义编译器不知道调用谁voidf1(){coutf1()endl;}voidf1(inta1){coutf1(int a 1)endl;}//会报错编译器不知到要调用谁6.引用6.1引用的概念和定义引⽤不是新定义⼀个变量⽽是给已存在变量取了⼀个别名编译器不会为引⽤变量开辟内存空间它和它引⽤的变量共⽤同⼀块内存空间。类型 引用别名 引用对象;C中为了避免引⼊太多的运算符会复⽤C语⾔的⼀些符号⽐如前⾯的和这⾥引⽤也和取地址使⽤了同⼀个符号⼤家注意使⽤⽅法⻆度区分就可以。#includeiostreamusingnamespacestd;intmain(){inta0;// 引⽤b和c是a的别名intba;intca;// 也可以给别名b取别名d相当于还是a的别名intdb;d;// 这⾥取地址我们看到是⼀样的coutaendl;coutbendl;coutcendl;coutdendl;return0;}6.2引用的特性1.引用在定义时必须初始化。2.一个变量可以有多个引用。3.引用一旦引用一个实体就再不能引用其他实体。#includeiostreamusingnamespacestd;intmain(){inta10;// 编译报错“ra”: 必须初始化引⽤//int ra;intba;intc20;// 这⾥并⾮让b引⽤c因为C引⽤不能改变指向// 这⾥是⼀个赋值bc;coutaendl;coutbendl;coutcendl;return0;}6.3const引用1.可以引⽤⼀个const对象但是必须⽤const引⽤。const引⽤也可以引⽤普通对象因为对象的访问权限在引⽤过程中可以缩⼩但是不能放⼤。2.不需要注意的是类似 int rb a3; double d 12.34; int rd d; 这样⼀些场景下a3的和结果保存在⼀个临时对象中 int rd d 也是类似在类型转换中会产⽣临时对象存储中间值也就是时rb和rd引⽤的都是临时对象⽽C规定临时对象具有常性所以这⾥就触发了权限放⼤必须要⽤常引⽤才可以。3.所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象C中把这个未命名对象叫做临时对象。intmain(){constinta10;// 编译报错error C2440: “初始化”: ⽆法从“const int”转换为“int ”// 这⾥的引⽤是对a访问权限的放⼤//int ra a;// 这样才可以constintraa;// 编译报错error C3892: “ra”: 不能给常量赋值//ra;// 这⾥的引⽤是对b访问权限的缩⼩intb20;constintrbb;// 编译报错error C3892: “rb”: 不能给常量赋值//rb;return0;}#includeiostreamusingnamespacestd;intmain(){inta10;constintra30;// 编译报错: “初始化”: ⽆法从“int”转换为“int ”// int rb a * 3;constintrba*3;doubled12.34;// 编译报错“初始化”: ⽆法从“double”转换为“int ”// int rd d;constintrdd;return0;}6.4指针和引用的关系C中指针和引⽤就像两个性格迥异的亲兄弟指针是哥哥引⽤是弟弟在实践中他们相辅相成功能有重叠性但是各有⾃⼰的特点互相不可替代。1.语法概念上引⽤是⼀个变量的取别名不开空间指针是存储⼀个变量地址要开空间。2.引⽤在定义时必须初始化指针建议初始化但是语法上不是必须的。3.引⽤在初始化时引⽤⼀个对象后就不能再引⽤其他对象⽽指针可以在不断地改变指向对象。4.引⽤可以直接访问指向对象指针需要解引⽤才是访问指向对象。5.sizeof中含义不同引⽤结果为引⽤类型的⼤⼩但指针始终是地址空间所占字节个数(32位平台下占4个字节64位下是8byte)。6.指针很容易出现空指针和野指针的问题引⽤很少出现引⽤使⽤起来相对更安全⼀些。7.inline1.⽤inline修饰的函数叫做内联函数编译时C编译器会在调⽤的地⽅展开内联函数这样调⽤内联函数就需要建⽴栈帧了就可以提⾼效率。2.inline对于编译器⽽⾔只是⼀个建议也就是说你加了inline编译器也可以选择在调⽤的地⽅不展开不同编译器关于inline什么情况展开各不相同因为C标准没有规定这个。inline适⽤于频繁调⽤的短⼩函数对于递归函数代码相对多⼀些的函数加上inline也会被编译器忽略。3.C语⾔实现宏函数也会在预处理时替换展开但是宏函数实现很复杂很容易出错的且不⽅便调试C设计了inline⽬的就是替代C的宏函数。4.inline不建议声明和定义分离到两个⽂件分离会导致链接错误。因为inline被展开就没有函数地址链接时会出现报错。8.nullptr1.C中NULL可能被定义为字⾯常量0或者C中被定义为⽆类型指针(void*)的常量。不论采取何种定义在使⽤空值的指针时都不可避免的会遇到⼀些⿇烦本想通过f(NULL)调⽤指针版本的f(int*)函数但是由于NULL被定义成0调⽤了f(intx)因此与程序的初衷相悖。f((void*)NULL);调⽤会报错。2.C11中引⼊nullptrnullptr是⼀个特殊的关键字nullptr是⼀种特殊类型的字⾯量它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题因为nullptr只能被隐式地转换为指针类型⽽不能被转换为整数类型。

相关文章:

C++初阶:入门基础

1.C的第一个程序 C兼容C语言绝大多数的语法&#xff0c;所以C语言实现的hello world依旧可以运行&#xff0c;C中需要把定义文件代码后缀改为.cpp //C兼容C语言 #include<stdio.h> int main() {printf("hello world\n");return 0; }当然&#xff0c;C也有一套自…...

Android开发工程师职位聚焦蓝牙技术开发指南

引言 在当今物联网和智能设备蓬勃发展的时代,蓝牙技术已成为Android应用开发的核心组成部分。作为一名Android开发工程师,专注于蓝牙技术不仅能提升设备互联能力,还能优化用户体验。本指南基于典型职位职责,深入探讨蓝牙相关开发,涵盖功能实现、模块设计、代码维护及面试…...

Rei Skills:883+AI技能库如何重塑开发工作流与效率

1. 项目概述&#xff1a;当AI助手拥有“技能库”&#xff0c;你的开发效率会发生什么变化&#xff1f;如果你和我一样&#xff0c;每天都在和各种AI编程助手打交道——Claude Code、Cursor、GitHub Copilot&#xff0c;那你肯定有过这样的体验&#xff1a;想让AI帮你写一个复杂…...

如何利用163MusicLyrics实现全平台音乐歌词智能提取与管理

如何利用163MusicLyrics实现全平台音乐歌词智能提取与管理 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代&#xff0c;歌词不仅是歌曲的文字载体&#xf…...

《UNIX环境高级编程》读书笔记05: 文件和目录

作者: andylin02 学习章节: 第4章 文件和目录 关键词&#xff1a; stat/lstat/fstatat、文件类型、文件权限、umask、chmod、chown、硬链接、符号链接、目录遍历、文件时间戳一、引言&#xff1a;从文件I/O到文件属性的跨越上一章我们聚焦于文件I/O的五个核心系统调用&#xff…...

计算机毕业设计 | SpringBoot+vue农商对接系统 商品蔬菜购买平台(附源码+论文)

1&#xff0c;绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的传播速度极慢&…...

AI Agent 面试题 500:如何实现Agent的自我反思触发条件优化?

&#x1f525; AI Agent 面试题 500&#xff1a;如何实现Agent的自我反思触发条件优化&#xff1f;摘要&#xff1a;本文深入解析了「如何实现Agent的自我反思触发条件优化&#xff1f;」这一 AI Agent 领域的核心面试题。文章从 自我反思与纠错 的基本概念出发&#xff0c;系统…...

AI Agent 面试题 300:如何处理Function Calling的返回值解析和错误处理?

&#x1f525; AI Agent 面试题 300&#xff1a;如何处理Function Calling的返回值解析和错误处理&#xff1f;摘要&#xff1a;本文深入解析了「如何处理Function Calling的返回值解析和错误处理&#xff1f;」这一 AI Agent 领域的核心面试题。文章从 Function Calling 机制 …...

收藏 | 小白也能学会!大模型思维链(CoT)实战指南,让AI准确思考

本文介绍了大模型思维链&#xff08;CoT&#xff09;的概念及其有效性&#xff0c;解释了通过先输出推理过程再生成答案&#xff0c;可显著提升复杂问题的准确率。文章详细阐述了Zero-shot CoT和Few-shot CoT的应用方法&#xff0c;并提供了多种场景下的实战案例&#xff0c;如…...

别再傻傻分不清了!Unity和UE5里颜色贴图(Albedo vs Base Color)到底有啥区别?

Unity与UE5颜色贴图深度解析&#xff1a;Albedo与Base Color的实战差异 引言 在PBR&#xff08;基于物理的渲染&#xff09;工作流中&#xff0c;颜色贴图扮演着基础性角色。Unity的Albedo与Unreal Engine 5的Base Color看似相似&#xff0c;实则存在微妙的本质差异。这些差异直…...

手机千问 文心 元宝 Kimi怎么导出pdf

打破AI对话「信息孤岛」&#xff1a;国产大模型对话导出PDF的全场景实测与效率方案 在人工智能深度融入办公流的今天&#xff0c;对话即生产力已成为共识。然而&#xff0c;根据《2025年生成式AI办公效率白皮书》显示&#xff0c;超过**68%**的技术从业者在跨平台迁移AI生成内容…...

Steam成就管理工具完整指南:3步轻松解锁游戏成就

Steam成就管理工具完整指南&#xff1a;3步轻松解锁游戏成就 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 你是否曾经因为游戏BUG导致成就无法解锁而感到…...

BullMQ:AI系统缺失的队列层

你是否曾经花了大量时间只是在等待&#xff1f;等待 API 调用完成。看着请求超时。盯着加载中的转圈动画。在某个时刻你会意识到&#xff1a;问题不在于代码&#xff0c;而在于架构。我们不能只是调用一个慢的东西然后期望一切顺利。这就是人们发明任务队列的原因。 1、什么是…...

收藏!2026年大模型红利爆发|程序员+小白必看,阿里跳槽案例+薪资表

昨天和一位杭州的老友闲聊&#xff0c;意外得知她成功跳槽至阿里&#xff0c;任职产品设计岗&#xff0c;谈妥的年包直接给到35万&#xff0c;如今已经顺利入职一个月&#xff0c;彻底站稳了脚跟。 熟悉她的人都清楚&#xff0c;这份收获绝非偶然——在此之前&#xff0c;她在二…...

JSON 小传:从 JavaScript 捡来的“数据网红”

先花一秒钟点个关注&#xff0c;今天的内容保证让你有收获。 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法&#xff0c;类似 XML。 JSON 比 XML 更小、更快&#xff0c;更易解析。 JSON 易于人阅读和编写。 C、Python、C、J…...

DESIGN.md:一个正在重塑AI开发美学的纯文本文件

DESIGN.md&#xff1a;一个正在重塑AI开发美学的纯文本文件 如果用一句话概括2026年AI开发圈最让人兴奋的变化&#xff0c;那一定是&#xff1a;AI终于开始“懂设计”了。 几个月前&#xff0c;你让Cursor或Claude Code帮你生成一个落地页&#xff0c;功能都没问题&#xff0c;…...

生物科研工作者的终极图标库:Bioicons 如何彻底改变你的科学绘图体验

生物科研工作者的终极图标库&#xff1a;Bioicons 如何彻底改变你的科学绘图体验 【免费下载链接】bioicons A library of free open source icons for science illustrations in biology and chemistry 项目地址: https://gitcode.com/gh_mirrors/bi/bioicons 作为一名…...

Java+AI<AI的使用与Java的基础学习4>

今天通过学习了解了隐式转换和强制转换隐式转换也叫自动类型提升。就是把一个取值范围小的数据或者变量&#xff0c;赋值给另一个取值范围大的变量。此时不需要我们额外写代码单独实现&#xff0c;是程序自动帮我们完成的。有两个需要记忆的规则规则一&#xff1a;如有byte sho…...

2026五一出行运动扭伤,五种常用止痛药怎么选?

五一假期户外活动增多&#xff0c;爬山、打球、跑步时脚踝扭伤或肌肉拉伤并不少见。很多人第一时间想到吃止痛药&#xff0c;但市面上的选择众多&#xff1a;布洛芬、对乙酰氨基酚、塞来昔布、双氯芬酸口服缓释片、双氯芬酸外用凝胶&#xff0c;到底哪个更适合急性扭伤&#xf…...

【踩坑】你以为在过人机验证,实际上正亲手把木马装进电脑 | ClickFix攻击

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~学长今天在日常逛软件分享网站时候&#xff0c;跳出来一个谷歌人机验证&#xff0c;一开始没在意&#xff0c;但跟选图片的验证不一样的是&#xff0c;这…...

操作系统(四)

一、调度算法的评价标准 1.cpu利用率&#xff1a; cpu利用率cpu忙碌时间 / 总时间 2.系统吞吐量&#xff1a; 单位时间内完成的作业数量&#xff1b; 系统吞吐量完成的作业数量/总时间3.周转时间&#xff1a; 从作业被提交给系统开始&#xff0c;到作业完成为止的整个时间周期…...

从C++老手到Python新手:用你熟悉的CLion无缝切换,配置Python开发环境保姆级教程

从C老手到Python新手&#xff1a;用CLion无缝切换的Python开发环境配置指南 作为一名长期使用CLion进行C开发的程序员&#xff0c;当你决定探索Python世界时&#xff0c;最明智的选择不是抛弃熟悉的工具&#xff0c;而是让CLion成为你学习新语言的跳板。JetBrains系列IDE的强大…...

26.单调栈

三种双层循环 排列 可以出现&#xff08;0&#xff0c;1&#xff09;&#xff0c;&#xff08;1&#xff0c;0&#xff09; 包含自己的组合 严格组合 739. 每日温度 暴力解法 单调栈解法 思路 将原来的数组中找比自己的温度&#xff0c;放到了栈中。单调性&#xff0c;用的…...

【C++入门】命名空间、缺省参数、函数重载

这里我就不过多的进行描述了&#xff0c;有兴趣的可以去网络搜索一番。总而言之&#xff0c;从名称上面我们也可以看得出来&#xff0c;C是在C的基础上进行不断地优化发展。事实上确实是这样&#xff0c;C语言中90&#xff05;以上的语法在C中都适用。同时我们还要知道C作为众多…...

3分钟终极指南:用KMS智能激活脚本永久激活Windows和Office

3分钟终极指南&#xff1a;用KMS智能激活脚本永久激活Windows和Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活弹窗而烦恼吗&#xff1f;或者Office突然变成只读模…...

必知必会:奖励模型训练与PPO稳定训练方法详解

必知必会:奖励模型训练与PPO稳定训练方法详解 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态,通过六大核心模块的系统化组织,为不同层次的学习者和开发者提供从完整学习路径。 github地址:AI-Compass👈:https://github.com/tingaicompass/AI-Com…...

必知必会:大模型对齐数据构造与PPO算法详解

必知必会:大模型对齐数据构造与PPO算法详解 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态,通过六大核心模块的系统化组织,为不同层次的学习者和开发者提供完整学习路径。 github地址:AI-Compass👈:https://github.com/tingaicompass/AI-Compass…...

ToastFish:如何在工作间隙悄无声息地提升英语词汇量?

ToastFish&#xff1a;如何在工作间隙悄无声息地提升英语词汇量&#xff1f; 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 你是否曾经想过&#xff0c;那些在等待会议开始、代码编译或文件下…...

不止画板子:用嘉立创EDA专业版搞定面板打印,从设计到下单全流程解析

不止画板子&#xff1a;用嘉立创EDA专业版搞定面板打印&#xff0c;从设计到下单全流程解析 当硬件产品经理或工业设计师完成PCB设计后&#xff0c;如何为产品打造专业的外观面板&#xff1f;嘉立创EDA专业版的面板打印功能&#xff0c;让您无需切换软件就能实现从电路设计到外…...

基于Foundation Models框架的AI应用开发实战指南

1. 项目概述&#xff1a;一个面向基础模型应用开发的实战框架最近在GitHub上看到一个挺有意思的项目&#xff0c;叫rudrankriyam/Foundation-Models-Framework-Example。光看名字&#xff0c;可能有点抽象&#xff0c;但如果你正在尝试将像GPT、Claude、Llama这类大语言模型&am…...