C++(1)——入门

张开发
2026/5/27 23:38:24 15 分钟阅读
C++(1)——入门
前言从今天开始我将带大家来一起学习C不管你是零基础的编程小白想找一门实用语言打下扎实基础还是有 Python、Java 基础想深入底层原理、提升性能把控力又或是学生党要应对课程作业职场人需补充技能短板 —— 这个系列都能适配你的节奏。学习编程没有捷径C 更是需要多敲代码、多踩坑才能掌握。但没关系我会陪着大家慢慢走每篇文章都会把重点讲透也欢迎大家在评论区分享疑问、交流心得。接下来就让我们一起开启这段 C 学习之旅从 0 到 1逐步解锁编程的硬核力量C入门1本节知识点安排目的首先我们要了解到的是C是在C的基础之上容纳进去了面向对象编程思想并增加了许多有用的库以及编程范式 等。那么本章节主要目标为1.补充C语言语法的不足以及C是如何对C语言设计不合理的地方进行优化的比如作用域方面、IO方面、函数方面、指针方面、宏方面等。2.为后续类和对象学习打基础。1. C关键字(C98)C总计63个关键字C语言32个关键字ps下面我们只是看一下C有多少关键字不对关键字进行具体的讲解。后面我们学到以后再细讲。2. 命名空间我们先来看以下代码#include stdio.h #include stdlib.h int rand 10; int main() { printf(%d\n, rand); return 0; }当我们运行这段代码时我们会发现系统报错了这是因为这里发生了重定义的冲突即我们定义的rand变量与stdilb中的rand函数发生了冲突。由此我们能够发现C语言其实是存在命名冲突的问题。那么这时候关键字namespace就要发挥它的作用了。在这里我们要先引入域这个概念。域包括类域命名空间域局部域全局域等。int a 0; int main() { int a 1; printf(%d\n, a); }如上面代码所示第一个a变量就是存在于全局域第二个a变量就存在于局部域。ps这里我们只对这两个域做个简单介绍剩下的我们后续学习到时会详细讲解。我们知道因为局部优先此时我们输出a默认访问的是局部域中的a那么现在请大家思考一个问题如何访问全局域这时候我们就要用到域作用限定符::printf(%d,::a);当::的左边是空白就代表着访问的是全局域。int a 0; //全局域 namespace bit //命名为bit { int a 1; //命名空间域 } int main() { int a 2; //局部域 printf(%d\n, a); }在上面这段代码中变量a访问的优先级是局部域 - 全局域 - 展开了命名空间域 or 指定访问命名空间域。using namespace bit;这个就叫做展开命名空间。当没有这条语句时也就没有展开命名空间编译时也就不会去命名空间中搜索。注意展开命名空间相当于将这部分空间暴露到全局因此全局域和展开的命名空间中不能出现同一个变量。因此不要轻易展开命名空间。上述的展开是全部展开除此之外我们还可以部分展开using bit::a;像这样就能把 bit 这个域中的a变量给展开了从而避免了其它变量与 bit 中的变量发生冲突。printf(%d,bit::a);这条语句就是指定访问命名空间域即在::前加上域名 bit。这时我们再回到开头如何解决rand冲突的问题#include stdio.h #include stdlib.h namespace bit { int rand 1; } int main() { printf(%d\n, bit::rand); return 0; }那么像这样我们就能轻松解决该问题啦。接下来我们还要了解到1.命名空间中不仅可以定义变量还可以定义函数、类型。比如namespace bit { // 命名空间中可以定义变量/函数/类型 int a 0; int b 1; int Add(int left, int right) { return left right; } struct Node { struct Node* next; int val; }; }2.命名空间可以嵌套比如namespace N1 { int a 0; int b; int Add(int left, int right) { return left right; } namespace N2 { int a 1; int c; int Sub(int left, int right) { return left - right; } } }而对于嵌套中的命名空间我们是这样访问的printf(%d,N1::N2::a);3.多个同名的命名空间最后会被合并为同一个空间。3.C输入输出ps这里只做简单解释#includeiostream using namespace std; int main() { int a; cout hello world endl; cin a ; }这是一段简单的输出代码接下来我会带你逐步解析这段代码#includeiostream首先这是在输入输出时所需要包含的头文件IO流。你可以暂时把它简单理解为c语言中的stdio.h。using namespace std;这个我们知道是在展开std这个命名空间这里的std其实就是标准库。那么有了这条代码我们就可以使用下面的cout和endl了cout hello world endl;在这段代码中首先我们先可以把cout理解为一个对象或者是我们的屏幕。这个是一个运算符叫做流插入运算符它的作用就是将它右边的内容插入到左边的对象当中。endl它的作用其实就相当于\n,是用来换行的。总的可以理解为在cout中插入一个hello world再在hello world后面插入一个换行符。这就是一个简单的输出语句。值得注意的是cout的一大特点就是它能够自动识别类型。cin a ;这里可以把cin理解为我们的键盘。这也是一个运算符叫做流提取运算符那么它的作用就是将它左边的内容读取到右边。所以这段代码也就意味这从键盘上读取数据到变量a中。同样cin也能够自动识别类型。但是需要注意的是cin在读取小数时精度可能会发生变化。虽然我们可以去指定它的精度包括cout打印的格式等但是会十分麻烦这里就不做过多解释好奇的同学们可以自己去了解一下。这里顺便提一嘴在大量的输入输出时scanf和printf会比cin和cout速度更快原因是不管是C还是C语言IO都是有缓冲区的而C的IO流需要去兼容同步C语言在输出时需要去检查C语言的缓冲区内有没有内容所以导致速度较慢。当然也有方法把这个同步关掉这里就不做讲解了。到这里C入门1的学习就结束了希望同学们一定要去多敲代码实操巩固。下一节我们会继续深入 C 的核心语法解锁更多优化特性和实用技巧。如果大家在练习中遇到问题或者有想补充的知识点欢迎在评论区留言交流 关注我一起稳步推进 C 学习之旅咱们下次见

更多文章