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

深圳做棋牌网站建设哪家服务好什么是营销渠道

深圳做棋牌网站建设哪家服务好,什么是营销渠道,现在网络推广方式,智邦国际erp系统怎么样目录 6. 引用 6.1 引用概念 6.2 引用特性 6.3 常引用 正确用法#xff1a;权限 缩小/平移 6.4 使用场景 1. 做参数 2. 做返回值 3.传值、传引用效率比较 6.5引用问题举例 6.6 反汇编中的 6.7 引用和指针的不同点#xff1a; 7.内联函数 7.1 内联函数与宏对…目录 6. 引用 6.1 引用概念 6.2 引用特性 6.3 常引用 正确用法权限 缩小/平移 6.4 使用场景 1. 做参数 2. 做返回值 3.传值、传引用效率比较 6.5引用问题举例 6.6 反汇编中的 6.7 引用和指针的不同点 7.内联函数 7.1 内联函数与宏对比 7.2 内联函数 7.2内联函数的特性 8. auto关键字 auto的使用细则 1. auto与指针和引用结合起来使用 2. 在同一行定义多个变量 3.auto不能推导的场景 9.指针空值nullptr 本篇为继承上一篇基础之上进行讲解# C入门 第一篇(C关键字 命名空间C输入输出) 6. 引用 6.1 引用概念 引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空 间它和它引用的变量共用同一块内存空间。 就像是给他人取外号虽然称呼不同但是所代表的都是同一个人 类型 引用变量名(对象名) 引用实体; void TestRef() {int a 10; int ra a;//定义引用类型printf(%p\n, a);printf(%p\n, ra); }6.2 引用特性 1. 引用在定义时必须初始化 2. 一个变量可以有多个引用 3. 引用一旦引用一个实体再不能引用其他实不能像指针那样改变指向 因为为同一个地址故当其中一个发生改变时另一个会跟着一起改变 6.3 常引用 void TestConstRef() {const int a 10; //int ra a; // 该语句编译时会出错a为常量 const int ra a; // int b 10; // 该语句编译时会出错b为常量 const int b 10; double d 12.34; //int rd d; // 该语句编译时会出错类型不同 const int rd d; }具体讲解 为什么次数dc时报错了呢         当然此处与指针的特点相似 指针和引用进行 赋值/初始化 权限可以缩小但不能放大 const int c2; c时只能读的 而 int dc; 此时d 不仅变成了可以读而且还可以写扩大了权限故发生了报错 同样的例子权限放大 正确用法权限 缩小/平移 const int retCount();拓展 当定义 int i1; 时i 是一个整型变量。         接下来double rd i; 语句将一个 double 类型的引用 rd 绑定到了 i 上。引用 rd 和变量 i 现在指向同一个内存地址它们是同一个变量的不同名称。由于 rd 是 i 的引用可以通过 rd 修改 i 的值并且对 rd 的修改也会对 i 产生影响。         也可以理解为i作为变量而rd为与i同一地址为i的另名而作为引用i不可以对rd进行更改故应该前面➕const 改为常变量 6.4 使用场景 1. 做参数 //可以简化对指针的引用 void Swap(int left, int right) {int temp left;left right;right temp; }int main() {int a0,int b1;swap(a,b);return 0; }2. 做返回值 //传引用 int Count() {static int n 0;n;// ... return n; }我们曾经使用的都是传值法 例如 Swap(int x,int y) {return xy; }3.传值、传引用效率比较 以值作为参数或者返回值类型在传参和返回期间函数不会直接传递实参或者将变量本身直接返回而是传递实参或者返回变量的一份临时的拷贝因此用值作为参数或者返回值类型效率是非常低下的尤其是当参数或者返回值类型非常大时效率就更低。 当我们深入了解栈帧就会知道 return xy函数销毁时该return值存放在栈帧的寄存器上 引用 return时并不像传值返回此处返回可以认为是产生了一个n的别名可以减少拷贝节约空间 引用返回的优点体现 #include assert.h#define N 10 typedef struct Array {int a[N];int size; }AY;//引用返回 //1减少拷贝 //2调用者可以修改返回对象 int PosAt(AY ay ,int i) {assert(iN);return ay.a[i];//此处返回的就是a的第i个位置的别名 }int main() {int retCount();AY ay;for (int i 0; i N; i){PosAt(ay,i)i*10;}for (int i 0; i N; i){coutPosAt(ay,i) ;}coutendl;return 0; }6.5引用问题举例 举例 int Add(int a, int b) {int c a b;return c; }int main() {int ret Add(1, 2);//Add(3, 4);cout Add(1,2) is : ret endl;cout Add(1,2) is : ret endl;return 0; }当然有些编译器输出的值可能是 Add(12) is : 7 Add(12) is : ~(此处为随机值) 不同的编译器可能在此处输出的值不同 但为什么会输出这样的值呢 在执行过程中 int ret Add(1, 2);此时ret n 3 若此时将下一行的 Add(3, 4);注销此时输出就可能为  3(此处为随机值或3) (此处为随机值) 原因是访问时 该空间已经被销毁不同的编译器输出结果可能不同但此方法就是错误的 这种方法语法上是可以执行的但是结果上是未定义的,本身就是错误的 在该代码基础之上对main函数进行更改怎么样都是错误的 6.6 反汇编中的 在反汇编中可以看出 -在表层上引用是不开空间的 - 在底层上引用开辟空间4字节从汇编层面上引用也是用指针实现的 6.7 引用和指针的不同点 引用概念上定义一个变量的别名指针存储一个变量地址。 引用在定义时必须初始化指针没有要求 引用在初始化时引用一个实体后就不能再引用其他实体而指针可以在任何时候指向任何一个同类型实体 没有NULL引用但有NULL指针 在sizeof中含义不同:引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32 位平台下占4个字节) 引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小 有多级指针但是没有多级引用 访问实体方式不同指针需要显式解引用引用编译器自己处理 引用比指针使用起来相对更安全 7.内联函数 7.1 内联函数与宏对比 以inline 修饰的函数叫内联函数 在C语言中使用定义宏#define 定义宏相关文章# C语言程序环境和预处理 定义相关define 函数 在变异阶段阶段就会进行读写使用时容易出现bug 若定义一个xy的宏 #define Add(x,y) ((x)(y))宏函数的错误写法 #define Add(int x, int y) return x y; #define Add(x, y) x y; #define Add(x, y) (x y); #define Add(x, y) (x) (y);相比内联函数定义宏的缺点是宏定义函数相比内联函数的缺点包括可读性差、难以调试、没有类型安全的检查、占用更多内存、可能引发副作用、排查错误困难和缺乏类型检查等等。 内联函数的优点 9. 减少函数调用开销。 10. 减少函数体积节省代码存储空间。 11. 提高指令缓存命中率。 12. 消除函数调用的运行时开销。 7.2 内联函数 使用lnline内联函数编译时C编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数提升程序运行的效率 inline int Add(int x,int y) {return xy; }内敛是以空间(编译出来的可执行程序会变大非运行时占用内存变大)换时间的做法 假设1000个调用swap的地方: swap不是inline swap调用swap指令合计是101000 swap是inline swap调用swap指令合计是 1*1000 7.2内联函数的特性 inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会 用函数体替换函数调用缺陷:可能会使目标文件变大优势:少了调用开销提高程序运 行效率。inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建 议:将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不 是递归、且频繁调用的函数采用inline修饰否则编译器会忽略inline特性。inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址 了链接就会找不到。 // F.h #include iostream using namespace std; inline void f(int i);// F.cpp #include F.h void f(int i) {cout i endl; }// main.cpp #include F.h int main() {f(10);return 0; } // 链接错误:main.obj : error LNK2019: //无法解析的外部符号 void __cdecl f(int) //(?fYAXHZ)该符号在函数 _main 中被引用8. auto关键字 auto 关键字是用来进行类型推断的。在 C11 标准引入之前我们需要显式地声明变量的类型例如 int、double 等。而使用 auto 关键字则可以根据变量的初始值自动推断出其类型。 auto 关键字的使用可以简化代码提高代码的可读性和可维护性。特别是在定义复杂类型或迭代器类型时使用 auto 可以避免重复编写类型名称减少代码冗余。 【注意】 使用auto定义变量时必须对其进行初始化在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。因此auto并非是一种“类型”的声明而是一个类型声明时的“占位符”编译器在编 译期会将auto替换为变量实际的类型 typedef相比于auto的缺点 typedef char* pstring; int main() { const pstring p1;// 编译成功还是失败? const pstring* p2;// 编译成功还是失败? return 0; }p1失败 正确写法 const pstring p1nullptr; const pstring* p2;auto的使用细则 1. auto与指针和引用结合起来使用 用auto声明指针类型时用auto和auto*没有任何区别但用auto声明引用类型时则必须 加 遍历数组 //曾今的方法 int array[] {1, 2, 3, 4, 5, 6}; for (int i 0; i sizeof(array) / sizeof(int); i) {cout array[i] ; }cout endl;// 遍历数组新方式: // 范围for--语法糖 自动依次取数组中数据赋值给e对象 //自动判断结束 for (auto e : array) {cout e ; } cout endl;2. 在同一行定义多个变量 当在同一行声明多个变量时这些变量必须是相同的类型否则编译器将会报错因为编译器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量。 void TestAuto() {auto a 1, b 2;auto c 3, d 4.0;// 该行代码会编译失败因为c和d的初始化表达式类型不同 }3.auto不能推导的场景 auto不能作为函数的参数 // 此处代码编译失败auto不能作为形参类型 //因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) { }auto不能直接用来声明数组 void TestAuto() {int a[] {1,2,3};auto b[] {456}; }为了避免与C98中的auto发生混淆C11只保留了auto作为类型指示符的用法 auto在实际中最常见的优势用法就是跟以后会讲到的C11提供的新式for循环还有 lambda表达式等进行配合使用。 9.指针空值nullptr 二者的区别是什么呢 NULL实际是一个宏在传统的C头文件(stddef.h)中可以看到如下代码: 可以看到NULL可能被定义为字面常量0或者被定义为无类型指针(void*)的常量。不论采取何 种定义在使用空值的指针时都不可避免的会遇到些麻烦 void f(int) {coutf(int)endl; }void f(int*) {coutf(int*)endl; }int main(){f(0);f(NULL);f((int*)NULL);return 0; }程序本意是想通过f(NULL)调用指针版本的f(int*)函数但是由于NULL被定义成0因此与程序的 初衷相悖。 在C98中字面常量0既可以是一个整形数字也可以是无类型的指针(void*)常量但是编译器 默认情况下将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0。 注意: 在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入 的。在C11中sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr。 本篇就到此结束啦感谢阅读创作不易若喜欢的话不妨留下一个免费的赞吧
http://www.dnsts.com.cn/news/2199.html

相关文章:

  • 个人网站有自己服务器是不是就不需要虚拟主机公司做网页要多少钱
  • 佛山网站建设及推广服务公司国外免费推广网站有哪些
  • 赣州网站设计广告公司网站
  • 网站分享的功能怎么做的济南谷歌推广
  • 成都鱼羊环保网站制作设计百度安全中心
  • 下列哪些不属于企业网站建设基本原则济南网站建设制作
  • 做网站每月收入那个推广平台好用
  • 邢台做移动网站哪儿好浙江百度推广开户
  • 漳州网站建设到博大赞策划公司排行榜
  • 做电商网站需要多少时间营销技巧和营销方法心得
  • 奉贤网站制作网络营销app有哪些
  • 广州住建网站google框架一键安装
  • 申请政府网站群建设资金的关键词搜索名词解释
  • 怎么做网站注册登入页面企业文化是什么
  • 装修公司报价明细表范本seod的中文意思
  • 长沙市网站推广公司seo岗位
  • 教育营销型的网站建设sem搜索引擎营销
  • 海外免费云服务器厦门百度seo点击软件
  • 广州网站建设大公司排名搜索引擎优化方法与技巧
  • 房地产网站建设流程线下推广有哪些渠道
  • 如何建设好英文网站高级seo招聘
  • 网站建设功能昆明网络推广
  • 网站专题教程网站关键词seo排名
  • 深圳永久免费网站建设哪个好搜索排名影响因素
  • 澧县网站设计乐清网站建设
  • 重庆铜梁网站建设费用信息推广服务
  • 宿州做网站的公司有哪些必应搜索引擎下载
  • 担保交易网站开发成都seo招聘
  • 网站推广全过程网站手机优化
  • 网站怎么做必须交钱吗网站优化外包费用