网站与微信区别,创意网页,宝安沙井海岸城,网络优化器本节目标 一、C关键字#xff08;C98#xff09; 二、命名空间 三、C的输入输出 四、缺省函数 五、函数重载 六、引用 七、内联函数 八、auto关键字#xff08;C11#xff09; 九、范围for#xff08;C11#xff09; 十、指针空值nullptr#xff08;C11#xff09; 一.…本节目标 一、C关键字C98 二、命名空间 三、C的输入输出 四、缺省函数 五、函数重载 六、引用 七、内联函数 八、auto关键字C11 九、范围forC11 十、指针空值nullptrC11 一.C关键字C98
C总计63个关键字C语言32个关键字 二、命名空间
1.命名空间的定义
在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存 在于全局作用域中可能会导致很多冲突使用命名空间的目的是对标识符的名称进行本地化 以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的命名空间要用到namepsace关键字 后面跟命名空间的名字每个命名空间都是一个新的作用域一个命名空间就定义了一个新的作用域里面所有内容都局限于该空间内
2.命名空间的使用
三种使用方法1.命名空间名称加作用域限定符2.使用using将命名空间中的某个成员引入3.使用using namespace 命名空间名称 引入 三、C的输入输出
使用cout标准输出对象控制台和cin标准输入对象键盘时必须包含头文件iostream以及按命名空间使用方法使用stdcout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在iostream头文件中是流插入运算符 是流提取运算符使用C的输入输出比C语言更加方便不需要手动控制格式C的输入输出可以自动识别变量类型实际上cout和cin分别是ostream和istream类型的对象 也涉及到一些重载的知识后续我们才会学到早期的标准库所有功能都在全局域内声明在.h的头文件中后来将其实现在std命名空间内为了和C语言区分规定了C头文件不用带.h,旧的编译器vc6.0还支持.h的后续编译器已不再支持 所以推荐iostream std的方式 四、缺省函数
1.缺省函数的概念
缺省函数是在声明或者定义函数时为函数的参数指定一个缺省值在调用该函数时如果没有指定实参则采用缺省值
2.缺省函数的分类
全缺省函数半缺省函数注意半缺省函数必须从右到左依次给不能间隔注意缺省函数不能在函数声明和定义中同时出现否则编译器不知道用哪个注意缺省值必须时常量或者全局变量 五、函数重载
1.函数重载的概念
函数重载是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这些同名函数的形参列表参数个数类型或者顺序不同
2.为什么支持函数重载
C为什么支持函数重载呢而C语言却不支持从程序运行的角度看C或C的一个程序要跑起来需要经历以下阶段预处理编译汇编链接实际项目是由多个头文件和多个源文件构成的当一个cpp文件中调用了一个函数而此函数定义在另一个cpp文件里此时调用函数的cpp文件里没有函数的地址此时怎么办呢这时候就用到了链接链接看到了调用另一个cpp文件的函数然后链接就会到另一个cpp文件里去找函数地址找到链接在一起那么链接时对于这个函数例如上面的sum函数编译器会使用哪个名字去找它呢这里每个编译器都有自己的函数名修饰规则windows下修饰规则过于复杂我们这里使用linux里的修饰规则来演示 看完上面大家应该理解了为什么C语言不支持重载因为同名函数没办法区分而C是通过函数名修饰规则来区分函数的只有参数不同修饰出来的名字就不同就支持了重载注意如果两个函数 名字跟参数 都一样 仅仅返回值不同是不构成重载的编译器无法区分 六、引用
1.引用的概念
引用就是取外号不是定义一个新变量而是给已存在的变量取一个新名字编译器不会为此引用开辟新空间它和引用的变量共用一块内存空间使用方法如下注意引用类型必须和引用实体是同一种类型的
2.引用的特性
1.引用在定义时必须初始化2.一个变量可以有多个引用引用一旦引用一个实体再不能引用其他实体
3.常引用
如果引用的是个常量的话需要加const
4.使用场景
1.做函数参数跟指针作用类似修改此变量可改变此变量值2.做返回值在一般的传值返回下都会产生一个返回值的临时变量再返回用引用的情况下返回的就是此变量不会建造一个临时变量增加了效率但是有几点注意事项如果函数返回时出了作用域返回对象还在则可以使用引用返回如果已经释放还给系统则必须使用传值返回
5.传引用返回传值返回效率比较 6.引用和指针的区别
在语法上引用仅仅是个别名没有独立空间和其引用对象共用同一块内存空间但是在底层实现上实际占有空间因为引用底层是用指针来实现的区别1.引用定义变量新别名指针存储一个变量地址2.引用定义时必须初始化指针不需要3.引用在引用一个实体后无法再引用其他实体指针可以切换指向4.没有NULL引用但有NULL指针5.在sizeof中含义不同引用结果为引用类型的大小指针则只是指针变量的大小例如4个字节6.引用自加引用对象1指针自加指针向后偏移一个类型大小7.有多级指针但是没有多级引用8.访问实体方式不同指针需要显式解引用引用则是编译器自己处理9.引用比指针用起来相对更安全 七、内联函数
1.内联函数的概念
一个函数前面用inline修饰则叫做内联函数内联函数跟宏类似内联函数在编译期间会被展开没有了调用函数栈帧的开销提升了程序运行的效率下面两张区别图 call的意思是跳转
2.内联函数的特性
inline内联函数是一种以空间换时间的方法缺陷是 目标文件可能变大 优点是 少了函数调用开销提高了程序运行效率inline对于编译器只是一个建议一般建议将函数里面代码量少的进行inline,如果调用频繁且递归的还是建议不用inlineinline不建议声明和定义分离否则会导致链接失败因为inline函数被展开就没有函数地址了链接就会找不到
3.相关面试题
宏的优缺点优点 1.增强了代码的复用性 2.提高性能缺点 1.不方便调试宏预编译替换了2.导致代码可读性差可维护性差容易误用 3.没有类型安全的检查C有哪些技术可以替代宏1.常量定义const enum2.短小函数定义 如inline内联函数 八、auto关键字C11
有一些特别长的类型名如后面要学的STL迭代器太长写起来耗时且容易写错、如果用typedef给类型起别名的话不是特别好有些情况下例如加了const就不行了此时就产生了auto关键字 auto可以理解成一种变量类型写在变量前面可以自动的推断变量类型typeid是获取变量类型的库函数auto使用注意定义变量时必须初始化否则无法推导编译器在编译器会将其auto转变为其变量实际类型auto使用注意auto不能用作形参不能用来声明数组 九、范围forC11
1.范围for语法
在C98要想遍历数组得这样而范围for可以简化遍历操作这样就可以了
2.范围for使用条件 十、指针空值(nullptr)C11
以前喜欢给野指针赋予NULL但其实NULL其实是个宏在C11里面用nullptr替代了NULL为了代码的健壮性建议使用nullptr