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

山西省建设银行网站广西建筑特种作业证件查询官网

山西省建设银行网站,广西建筑特种作业证件查询官网,济南网站推广¥做下拉去118cr,交互设计作品文章目录 一、引用的概念二、引用的语法规则1、引用特性2、常引用 二、引用的使用场景1. 引用做参数2. 引用做返回值 三、引用和指针的区别 一、引用的概念 首先明确一下#xff0c;引用不是定义一个新的变量#xff0c;而是给已经存在的变量起一个别名#xff0c;变量和他… 文章目录 一、引用的概念二、引用的语法规则1、引用特性2、常引用 二、引用的使用场景1. 引用做参数2. 引用做返回值 三、引用和指针的区别 一、引用的概念 首先明确一下引用不是定义一个新的变量而是给已经存在的变量起一个别名变量和他的引用是共用同一块内存空间。 C中的引用就是和人的外号一样人的本名和外号都是指同一个人。比如李逵在家称为铁牛江湖上人称黑旋风。 二、引用的语法规则 类型 引用变量名(对象名) 引用实体 #includeiostream using namespace std;int main() {int a 10;int b a; // b是a的引用cout a endl;cout b endl;return 0; }变量a 和它的引用b使用的是同一块内存空间 int main() {int a 10;int b a;cout a endl;cout b endl; // a 和 b 使用的是同一块内存空间return 0; }int main() {int a 10;int b a;b 20; cout a b endl;return 0; }由于变量和变量的引用是使用的同一块内存地址这意味着如果改变b那么a也会随着b的改变而改变。 1、引用特性 1、引用在定义时必须初始化 void testref() {int a 10;int b; // err 引用是必须初始化 }2、一个变量可以有多个引用 一个变量被引用后可以继续被引用也可以引用变量的引用。 void testref02() {int a 10;int b a;int c a; // 一个变量可以有多个引用 int d b; // 可以引用变量的引用 }3、引用一旦引用一个实体变量就不能在引用其他实体 void testref02() {int a 10;int b 20;int c a;int c b; // c不可以重复引用 }这里要和C/C中的指针区分一下指针可以改变指针指向的对象但是引用不可以。 2、常引用 一般来说引用只可以引用变量不可以直接引用常量的。因为常量是不可以改变的。 void testref03() {int a 10; // err, 不可以引用常量 }解决办法 想要引用常量的话只要在引用的前面加一句const加上const之后引用就不可以发生改变。 除了上述情况引用的类型不同也会导致编译不同过这是因为在发生类型转化的过程中会产生临时变量而临时变量具有常性和常量一样需要用const引用。 void testref04() {char ch a;int a ch; // 不可以引用不同类型的变量类型转化时会产生临时变量临时变量具有常性 }产生临时变量时都要用常引用。 void testref05() {char ch a;const int a ch; }二、引用的使用场景 1. 引用做参数 在C语言学习指针的时候一定学过一个交换函数Swap那时候我们在Swap时参数必须要用传址调用因为如果用传值调用的话形参的改变是不影响实参的无法实现交换功能。 但是如果我们学了引用的话就不需要使用传址调用了可以直接用引用作为参数引用的形参就是实参的别名 void func(int x, int y) {cout x endl;cout y endl; }int main() {int a 10;int b 20;cout a endl;cout b endl;cout ------------- endl;func(a, b);return 0; }用引用的话在函数传参时就不需要传址调用了更加方便。 void Swap(int a, int b) {int tmp a;a b;b tmp; }2. 引用做返回值 是的你没看错引用不仅可以做函数的参数还可以做函数的返回值我们之前写的具有返回值的函数返回的并不是直接将函数中的变量而是返回的变量的一份临时拷贝而拷贝是需要付出一定代价的这样会降低我们代码的效率但是如果我们用引用返回的话就可以避免拷贝的代价在对程序性能要求高且允许使用引用的情况下尽量使用引用返回。 注意并不是所有的函数都可以用引用返回有些强行使用引用返回会造成一些不必要的错误。 函数可以用引用返回的条件 函数的返回值在出函数作用域后不会被销毁。 int Count() {static int n 0;n;// ... return n; }静态变量出了函数定义域之后不会销毁可以用引用返回。 int Count() {int n 0;n;// ...return n; // n在出函数作用域后就销毁了不要用引用返回 }传值、传引用的的效率比较 用值作为参数或返回值时在传参和返回期间函数是不会直接传递实参或则是将变量之间返回而是传递实参或者返回变量的一份临时拷贝所以用值传参或者做返回值效率是非常低的尤其是当参数或者返回值类型非常大时效率更加低下。 值和引用作为函数参数的效率对比 #include time.h // 传值 struct A{ int a[10000]; }; void TestFunc1(A a) {} // 传引用 void TestFunc2(A a) {}void TestRefAndValue() {A a;// 以值作为函数参数size_t begin1 clock();for (size_t i 0; i 10000; i){TestFunc1(a);}size_t end1 clock();// 以引用作为函数参数size_t begin2 clock();for (size_t i 0; i 10000; i){TestFunc2(a);}size_t end2 clock();// 分别计算两个函数运行结束后的时间cout TestFunc1(A)-time: end1 - begin1 endl;cout TestFunc2(A)-time: end2 - begin2 endl; }传值的效率明显低于传引用。 值和引用作为函数返回值的效率对比 #includetime.h struct A { int a[10000]; };A a; // 值返回 A TestFunc1() { return a; } // 引用返回 A TestFunc2() { return a; }void TestReturnByRefOrValue() {// 以值作为函数的返回值类型size_t begin1 clock();for (int i 0; i 100000; i)TestFunc1();size_t end1 clock();// 以引用作为函数的返回值类型size_t begin2 clock();for (int i 0; i 100000; i)TestFunc2();size_t end2 clock();// 计算两个函数运算完成之后的时间cout TestFunc1() Time: begin1 - end1 endl;cout TestFunc2() Time: begin2 - end2 endl; }int main() {TestReturnByRefOrValue();return 0; }传值和指针在作为传参以及返回值类型上效率相差很大。 三、引用和指针的区别 1、语义概念上引用就是变量的别名没有独立空间和引用实体共用同一块空间。 int main() {int a 10;int b a;cout a endl;cout b endl;return 0; }在底层实现上实际是有空间的因为引用是按照指针方式来实现的。 2、引用必须初始化指针可以在定义时不初始化 int a 20; int* pa; // 指针可以不初始化 int ra; // 引用必须初始化3、 引用在初始化时引用一个实体后就不能再引用其他实体而指针可以在任何时候指向任何一个同类型实体 4、没有NULL引用但有NULL指针。 int* pa NULL; int ra NULL; // err没有NULL引用5、在sizeof中含义不同引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32位平台下占4个字节) #includestring int main() {string str abcdef;string rstr str;string* pstr str;cout string rstr str: sizeof(rstr) endl;cout string* pstr str: sizeof(pstr) endl;return 0; }6、 引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小 int main() {int a 10;int ra a;int* pa a;ra;pa;cout int ra a: ra endl;cout int* pa a: pa endl;return 0; }7、有多级指针但是没有多级引用 int a 10; int* pa a; int** ppa pa; int ra a; int rra ra; // 无多级引用8、访问实体方式不同指针需要显式解引用引用编译器自己处理 int main() {int a 10;int* pa a;int ra a;cout ra endl;cout *pa endl;return 0; }9、引用比指针使用起来相对更安全毕竟指针存在野指针而不存在野引用。
http://www.hkea.cn/news/14291062/

相关文章:

  • 专业的网站设计制作wordpress 生成页面
  • 深圳做网站的好公司杭州做企业网站
  • 什么软件做电影短视频网站有哪些免费建站的网站
  • 西宁个人网站建设深圳定制网站制作
  • 烟台定制网站建设价格seo是什么的简称
  • 陕西通达工程建设有限公司网站长春网站快照优化公司
  • 友情链接网站免费品牌型网站
  • 怎么搭建钓鱼网站软件设计的过程
  • 网站开发与应用是什么长沙人才网官网入口
  • 软件工程师报名官网2022年seo还值得做吗
  • 做皮革网站100部看黄禁用免费在线
  • 网站信息同步做环保网站案例分析
  • 创意网站建设话术百度站长平台验证网站
  • 网站集约化建设性能要求怀化住建部网站
  • 网站seo视频教程在哪里做企业网站
  • 石家庄住房和建设局网站外贸公司论坛
  • 网站建设方案的所属行业是wordpress 一个主题
  • 智能建网站免费网站建设教程视频
  • 现在.net做网站的多吗地产网站建设互动营销
  • 最佳配色网站微企推
  • 个人网页官方网站wordpress後台小程序
  • 孝昌县专注网站建设代理设计师培训有哪些课程
  • 北京网站开发哪家公司好电子商务网站建设的书
  • 电商网站设计与制作总结如何把网站推广出去
  • 360免费wifi不能上网seo是哪个国家
  • 佛山外贸网站建设公司小程序公司代理
  • 信息最全的网站wordpress建手机网站吗
  • 网站自适应是什么做的深圳动画制作
  • 旅游网站建设与规划sap中小企业解决方案
  • 网站建设 投资合作正一品网站建设