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

肇庆住房和城乡建设局网站哈尔滨电商网站建设

肇庆住房和城乡建设局网站,哈尔滨电商网站建设,wordpress积分搜索,wordpress 收费下载目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.5 传值、传引用效率比较 1.6 引用和指针的区别 2. 内联函数 2.1 概念 2.2 特性 3.auto关键字#xff08;C11#xff09; 3.1 类型别名思考 3.2 auto简介 3.3 auto的使用细则 3.4 auto不能推…  目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.5 传值、传引用效率比较 1.6 引用和指针的区别 2. 内联函数 2.1 概念 2.2 特性 3.auto关键字C11 3.1 类型别名思考 3.2 auto简介 3.3 auto的使用细则 3.4 auto不能推导的场景 4. 基于范围的for循环C11 4.1 范围for的语法 4.2 范围for的使用条件 5. 指针空值nullptrC11 5.1 C98中的指针空值 ❀❀❀没有坚持的努力本质上并没有多大的意义。 1. 引用 1.1 引用概念 引用 不是新定义一个变量而 是给已存在变量取了一个 别名 编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。 类型 引用变量名(对象名)  引用实体注意引用类型必须和引用实体是同种类型的 b叫做a的引用b也可以叫做a的别名abcd四个只要有一个发生变化其余都发生变化 应用1 void Swap(int a, int b) {int tmp a;a b;b tmp; } 数据进行交换可以不用传指针可以用引用 应用2 #include iostreamtypedef struct ListNode {int val;struct ListNode* next; }LTNode;void LTPushBack_C(LTNode** pphead, int x) {//C语言单链表尾插需要传结构体的二级指针因为需要改变首部地址 }void LTPushBack_CPP(LTNode* phead, int x) {//C中用引用仅仅需要传结构体地址 }int main() {LTNode* plist NULL;//初始化LTPushBack_C(plist, 1);LTPushBack_CPP(plist, 1);return 0; } 也可以引用指针类型的  注意 typedef struct ListNode {int val;struct ListNode* next; }LTNode,*PLTNode;void LTPushBack_CPP(LTNode* phead, int x) {//C中用引用仅仅需要传结构体地址 } //这两个等同 void LTPushBack_CPP(PLTNode phead, int x) {//C中用引用仅仅需要传结构体地址 } 1.2 引用特性 代码展示 #include iostreamint main() {int a 10;int b a;int c a;int d b;//一个变量可以多次引用int e;//代码运行到这里会报错因为引用在定义时必须初始化int m 2;b m;//b在前面已经引用了a在这里并不是成为m的别名而是把m的值赋值给b然后此时abcd的值都是2return 0; } 1. 引用在 定义时必须初始化 2. 一个变量可以有多个引用 3. 引用一旦引用一个实体再不能引用其他实体 1.3 常引用 const修饰的变量只能读不能写这里的权限指的是读和写 #include iostreamint main() {int a 0;int b a;//权限不变const int c 2;int d c;//这里是错误的权限不能被放大const int x 3;const int y x;//这里是可以的权限不变int m 6;const int n m;//这里是可以的权限缩小return 0; } 取别名原则对于引用类型权限只能缩小不能放大 临时变量具有常性 #include iostreamint main() {int a 10;int b a;const int c 20;//常量也可以取别名double d 15.3;int f d;//在这里相当于f把自己的整数部分给一个临时变量临时变量把值赋给f临时变量具有常性const int e d;//这里的e不是d的引用而是临时变量的引用return 0; }   1.4 使用场景 1做参数 void Swap(int a, int b) {int tmp a;a b;b tmp; } 可以不用传指针 2做返回值 代码1展示传值返回 #include iostreamint Count() {int n 0;n;return n; }//n出了这个函数就被销毁了所以是赋值给临时变量的 int main() {int ret Count();return 0; } 函数返回过程把返回的值n给一个临时变量临时变量的类型就是函数类型上述代码的int临时变量再把值赋给主函数的ret。临时变量即有一个拷贝 代码2展示传引用拷贝 #include iostream int Count() {static int n 0;//static不能去掉如果去掉就会涉及出现越界问题因为空间被系统回收n;return n; }//返回int说明有一个临时引用是int类型临时引用是n的别名 int main() {int ret Count();//ret是临时引用的别名return 0; } 没有拷贝效率高 如果函数返回时出了函数作用域如果返回对象还在 ( 还没还给系统 ) 则可以使用引用返回 如果已经还给系统了则必须使用传值返回。(否则会出现越界问题 注意 #include iostream int Count() {int n 0;n;return n; } int main() {const int ret Count();//因为是临时变量的别名临时变量具有常性return 0; } 1.5 传值、传引用效率比较 以值作为参数或者返回值类型在传参和返回期间函数不会直接传递实参或者将变量本身直接返回 而是 传递实参或者返回变量的一份 临时的拷贝 因此用值作为参数或者返回值类型效率是非常低下的尤其是当参数或者返回值类型非常大时效率就更低。传地址和传引用是差不多的 传值和传引用在作为传参以及返回值类型上效率相差很大 。 1.6 引用和指针的区别 引用和指针的不同点 : 1. 引用概念上定义一个变量的别名指针存储一个变量地址。 2. 引用 在定义时 必须初始化 指针没有要求 3. 引用 在初始化时引用一个实体后就 不能再引用其他实体 而指针可以在任何时候指向任何一个同类型实体 4. 没有 NULL 引用 但有 NULL 指针 5. 在 sizeof 中含义不同 引用 结果为 引用类型的大小 但 指针 始终是 地址空间所占字节个数 (32 位平台下占4个字节 ) 6. 引用自加即引用的实体增加 1 指针自加即指针向后偏移一个类型的大小 7. 有多级指针但是没有多级引用 8. 访问实体方式不同 指针需要显式解引用引用编译器自己处理 9. 引用比指针使用起来相对更安全 语法的角度引用是一个别名没有额外开空间指针存储的是地址需要开一个4/8字节的空间但是从底层的角度是一样的方式实现的汇编代码是一致的 2. 内联函数 2.1 概念 以 inline 修饰 的函数叫做 内联函数 编译时 C 编译器会在 调用内联函数的地方展开 没有函数调用建立栈帧的开销内联函数 提升程序运行的效率。 在函数前增加 inline 关键字将其改成内联函数在编译期间编译器会用函数体替换函数的调用。 知识复习写一个ADD的宏 inline存在的意义1解决宏函数晦涩难懂、容易写错2宏不支持调试 优点1debug支持调试2不易写错就是普通函数的写法(3)提升程序的效率 2.2 特性 1. inline 是一种 以空间换时间 的做法省去调用函数额开销。所以 代码很长大于10行 或者有 循环 / 递归 的函数不适宜使用作为内联函数。 2. inline 对于编译器而言 只是一个建议 编译器会自动优化如果定义为 inline 的函数体内有循环 / 递归等等编译器优化时会忽略掉内联。 3. inline 不建议声明和定义分离 头文件中两个都写分离会导致链接错误。因为 inline 被展开就没有函数地址了链接就会找不到。 知识点 宏的优缺点 优点 1. 增强代码的复用性。 2. 提高性能。 缺点 1. 不方便调试宏。因为预编译阶段进行了替换 2. 导致代码可读性差可维护性差容易误用。 3. 没有类型安全的检查 。 C 有哪些技术替代宏 1. 常量定义 换用 const 2. 函数定义 换用内联函数 3.auto关键字C11 3.1 类型别名思考 随着程序越来越复杂程序中用到的类型也越来越复杂经常体现在 1. 类型难于拼写 2. 含义不明确导致容易出错 auto可以自动定义类型根据等号后面的变量 C中typeid(A).name();可以知道A的类型是什么 3.2 auto简介 在早期 C/C 中 auto 的含义是使用 auto 修饰的变量是具有自动存储器的局部变量 C11 中标准委员会赋予了 auto 全新的含义即 auto 不再是一个存储类型指示符而是作为一个新的类型 指示符来指示编译器 auto 声明的变量必须由编译器在编译时期推导而得 。 使用 auto 定义变量时 必须对其进行初始化 在编译阶段编译器需要根据初始化表达式来推导 auto 的实际类 型 。因此 auto 并非是一种 “ 类型 ” 的声明而是一个类型声明时的 “占位符” 编译器在编译期会将 auto 替换为 变量实际的类型 。 3.3 auto的使用细则 1auto与指针和引用结合起来使用 用 auto 声明 指针类型 时用 auto 和 auto* 没有任何区别但用 auto 声明引用类型时则必须加 auto*定义的必须是指针类型 2. 在同一行定义多个变量 当在同一行声明多个变量时这些变量必须是 相同的类型 否则编译器将会报错因为编译器实际只对 第一个类型进行推导然后用推导出来的类型定义其他变量 。 auto意义之一类型很长时懒得写可以让他自动推导。  3.4 auto不能推导的场景 1. auto 不能作为函数的参数以及函数的返回值 // 此处代码编译失败auto不能作为形参类型因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {} 2. auto 不能直接用来声明数组 void TestAuto() {int a[] {1,2,3};auto b[] {456}; } 3. 为了避免与C98中的auto发生混淆C11只保留了auto作为类型指示符的用法 4. auto 在实际中最常见的优势用法就是跟以后会讲到的 C11 提供的新式 for 循环还有 lambda 表达式等进行配合使用。 4. 基于范围的for循环C11 4.1 范围for的语法 C11 中引入了基于范围的for 循环。 for 循环后的括号由冒号 “ ” 分为两部分第一部分是范围内用于迭代的变量 第二部分则表示被迭代的范围 。 void TestFor() {int array[] { 1, 2, 3, 4, 5 };//加的原因是e是array内容的拷贝所以改变e不是改变array里面的内容for (auto e : array){e * 2;}//范围for依次自动取arrar中的数据赋值给e自动判断结束for (auto e : array)//这里写int也可以{cout e ;} } 与普通循环类似可以用 continue 来结束本次循环也可以用 break 来跳出整个循环 。 4.2 范围for的使用条件 1. for 循环迭代的范围必须是确定的 对于数组而言就是数组中第一个元素和最后一个元素的范围 对于类而言应该提供 begin 和 end 的 方法 begin 和 end 就是 for 循环迭代的范围。 注意以下代码就有问题因为 for 的范围不确定 void TestFor(int array[]) {for(auto e : array)cout e endl; } 这里的array是数组的首元素的地址所以范围不定 2. 迭代的对象要实现 和 的操作 。 5. 指针空值nullptrC11 5.1 C98中的指针空值 //指针初始化int* p1 NULL;int* p2 0;int* p3 nullptr;//建议用这一种 在 C98 中字面常量 0 既可以是一个整形数字也可以是无类型的指针 (void*) 常量但是编译器默认情况下将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0 。 注意 1. 在使用 nullptr 表示指针空值时不需要包含头文件因为 nullptr 是 C11 作为新关键字引入的 。 2. 在 C11 中 sizeof(nullptr) 与 sizeof((void*)0) 所占的字节数相同。 3. 为了提高代码的健壮性在后续表示指针空值时建议最好使用 nullptr 。
http://www.hkea.cn/news/14388413/

相关文章:

  • 社交网站建设网开发公司装饰装修合同范本简单
  • 河北省建设信息网站分销系统微信
  • 如何在网站后台做网页网站建设维护公司地址
  • 网站建设的常见问题网站建设加盟
  • 危险网站怎么做腾讯云认证云服务器是什么意思
  • 罗湖做网站多少钱百度在线识别图片
  • mysql网站后台管理系统下载中国建设网站红黑榜名单
  • 典当行 网站深圳响应式网站建设
  • 织梦仿asp网站外贸人才网
  • 网站排名优化电话徐州建站程序
  • 教科院网站建设普兰店网站建设公司
  • 许昌工程建设信息网站石家庄seo网站建设
  • 山东省住房和城乡建设厅网站教育中心网站关键词优化案例
  • 模板网站建设的弊端歌尔股份砍单
  • dw做购物网站游戏推广员到底犯不犯法
  • asp网站添加背景音乐省建设注册管理网站
  • 专业定制网站建设团队淳安千岛湖建设集团网站
  • 云南省网站备案要求怎样建设一个自己的网站微商
  • 手机网站永久免费制作惠州网站推广
  • 做空eth网站自动点击器免费下载
  • 常熟做网站多少钱WordPress导航栏目删除
  • 网站开发公众号开发二室一厅60平米装修案例
  • 顶呱呱网站开发无锡网站服务
  • 企业手机端网站源码wordpress 互动性
  • 吴江区建设工程招标网站wordpress5.0.2好用吗
  • 专业定制网站建设智能优化网站建设企业模板
  • 网站集约化建设情况汇报wordpress登陆后台
  • 杭州网站设计网站电子方案网站建设方案
  • 企业网站内容更新最新装修风格2021图片
  • 易语言网站开发教程千博企业网站系统