文章目录前言一、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感谢佬佬们↩︎