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

大庆市萨尔图区建设局网站sem竞价

大庆市萨尔图区建设局网站,sem竞价,高级seo优化招聘,我想自己建个网站 应该怎么做前言在C语言的学习中,并没有引用这个概念,但是在C中,加入了引用这个概念,说明引用也是很重要的,但是我们怎么理解引用呢?我是这么理解的,例如在水浒传中,108个英雄好汉都是自己的外号…

前言

在C语言的学习中,并没有引用这个概念,但是在C++中,加入了引用这个概念,说明引用也是很重要的,但是我们怎么理解引用呢?我是这么理解的,例如在水浒传中,108个英雄好汉都是自己的外号,例如及时雨宋江,豹子头林冲,花和尚鲁智深等等,我们就可以将引用理解为一个变量的外号,既然是外号,说明虽然名称不同,但是还是指的是同样的人。

引用概念

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

    int a = 10;int& b = a;cout << a << "   " << b << endl;cout << &a << "   " << &b << endl;return 0;

通过执行我们发现,不仅a和b的值相同,而且他们的地址也是相同的,这也就证明了引用和本体使用同一块内存空间。

注意:引用类型必须和引用实体是同一种类型。

引用特性

1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体

1.定义时必须初始化,在定义c时,并没有初始化,这时非法的,因为引用就是一个外号,没有一个本体,那么是给谁取外号呢?这显然是不行的。

2.一个变量可以有多个引用,还是以刚才水浒传的例子,李逵在家时被叫做“铁牛”,但是有的人还把他叫做“黑子”,还有人叫他“黑旋风”,我们的引用也是类似,一个本体可以有多个引用。

    int a = 10;int& b = a;int& c = b;int& d = a;printf("%d %d %d %d\n", a, b, c, d);printf("%p %p %p %p\n", &a, &b, &c, &d);return 0;

我们发现,虽然他有四个名字,但是本质上还是一个变量,拥有同样的内存空间。

3. 引用一旦引用一个实体,再不能引用其他实体,意思就是“引用”是一个忠诚的男人,自打初始化开始,引用只要成立,就会一直跟着本体。

    int a = 10;int c = 20;int& b = a;b = c;printf("%d %d %d \n", a, b, c);printf("%p %p %p \n", &a, &b, &c);

我们发现当我们对b进行赋值时,并不会改变a和b的引用关系,只会改变他的值,所以说“引用”是一个忠诚的男人。

常引用

有时候,我们需要引用的是一个常量,我们就必须使用常量引用。

    const int a = 10;// 该语句编译时会出错,a为常量,这样会将权限扩大   //int& ra = a;  const int& ra = a;// 该语句编译时会出错,b为常量// int& b = 10; const int& b = 10;double d = 12.34;// 该语句编译时会出错,类型不同//int& rd = d; const int& rd = d;

使用场景

引用一般有两个使用场景,第一个场景是做函数的参数,第二个是做函数的返回值。

  1. 做参数

当我们要交换两个变量的值,我们要传入指针才能改变实参的值。

// 1、引用做参数
void swap(int* p1, int* p2) // 传地址
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void swap(int& r1, int& r2) // 传引用
{int tmp = r1;r1 = r2;r2 = tmp;
}

我们前边在实现单链表的时候,我们需要传入二级指针,是为了修改一级指针的,为了让形参的改变影响到实参。

当然在学习了C++的引用之后,我们就可以使用引用传递参数来代替二级指针传递参数。

部分代码示例:

int* singleNumbers(int* nums, int numsSize, int& returnSize){
//int* singleNumbers(int* nums, int numsSize, int* returnSize){int* a = (int*)malloc(sizeof(int) * 2);//...//*returnSize = 2;returnSize = 2;return a;
}int TestList()
{SLTNode* plist = NULL;SListPushBack(plist, 1);SListPushBack(plist, 2);SListPushBack(plist, 3);SListPushBack(plist, 4);SListPushFront(plist, 5);SListPushFront(plist, 6);SListPushFront(plist, 7);SListPrint(plist);return 0;
}

2.做返回值

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;return 0;
}

为什么会出现这样的结果呢?那是因为我们对函数进行了引用传返回值,此时的ret就是c的引用,也就是c的别名,此时再调用Add(3,4)时,ret也被改为了他的值,ret会随着函数返回结果的改变而改变。

传值、传引用效率比较

以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。
#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;
}

值和引用的作为返回值类型的性能比较

#include <time.h>
struct A{ int a[10000]; };
A a;
// 值返回
A TestFunc1() { return a;}
// 引用返回
A& TestFunc2(){ return a;}
void TestReturnByRefOrValue()
{// 以值作为函数的返回值类型size_t begin1 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc1();size_t end1 = clock();// 以引用作为函数的返回值类型size_t begin2 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc2();size_t end2 = clock();// 计算两个函数运算完成之后的时间cout << "TestFunc1 time:" << end1 - begin1 << endl;cout << "TestFunc2 time:" << end2 - begin2 << endl;
}

通过上述代码的比较,发现传值和指针在作为传参以及返回值类型上效率相差很大

引用和指针的区别

语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。

int main()
{int a = 10;int& ra = a;cout<<"&a = "<<&a<<endl;cout<<"&ra = "<<&ra<<endl;return 0;
}

底层实现上实际是有空间的,因为引用是按照指针方式来实现的。

int main()
{int a = 10;int& ra = a;ra = 20;int* pa = &a;*pa = 20;return 0;
}

我们通过反汇编来观察,发现引用底层还是通过指针实现的,底层也是要开不同的空间的。

引用和指针的不同点:

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用在定义时必须初始化,指针没有要求
3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何
一个同类型实体
4. 没有NULL引用,但有NULL指针
5. 在sizeof中含义不同引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
位平台下占4个字节)
6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,但是没有多级引用
8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
9. 引用比指针使用起来相对更安全

总结

这篇文章介绍了“引用”的相关操作,并且讲解了“引用”和“指针”的不同,希望大家点赞收藏。


文章转载自:
http://dinncoreproachless.tpps.cn
http://dinncochaperone.tpps.cn
http://dinncodarby.tpps.cn
http://dinncocostuming.tpps.cn
http://dinncoheadstream.tpps.cn
http://dinncosupercurrent.tpps.cn
http://dinncocommandership.tpps.cn
http://dinncosliceable.tpps.cn
http://dinncoinornate.tpps.cn
http://dinncohematothermal.tpps.cn
http://dinncoantiquarianize.tpps.cn
http://dinncozaikai.tpps.cn
http://dinncoconcubinage.tpps.cn
http://dinncolaryngitic.tpps.cn
http://dinncointerlocal.tpps.cn
http://dinncoclonism.tpps.cn
http://dinncohypertonic.tpps.cn
http://dinncoorganon.tpps.cn
http://dinncogable.tpps.cn
http://dinncotarry.tpps.cn
http://dinncocyborg.tpps.cn
http://dinncochandler.tpps.cn
http://dinncohacky.tpps.cn
http://dinncotender.tpps.cn
http://dinncogyrostabilizer.tpps.cn
http://dinncoburnt.tpps.cn
http://dinncopasserine.tpps.cn
http://dinncofeculence.tpps.cn
http://dinncoshoelace.tpps.cn
http://dinncopseudepigraphy.tpps.cn
http://dinncomisdone.tpps.cn
http://dinncosymbiote.tpps.cn
http://dinncousmc.tpps.cn
http://dinnconitrifier.tpps.cn
http://dinncopacs.tpps.cn
http://dinncoversify.tpps.cn
http://dinncoacetifier.tpps.cn
http://dinncoknickers.tpps.cn
http://dinnconephograph.tpps.cn
http://dinncofantasticality.tpps.cn
http://dinncosalvatore.tpps.cn
http://dinncouniform.tpps.cn
http://dinncoovergraze.tpps.cn
http://dinncoisacoustic.tpps.cn
http://dinncothorite.tpps.cn
http://dinncostockroom.tpps.cn
http://dinncobrigadier.tpps.cn
http://dinncobarbuda.tpps.cn
http://dinncoshf.tpps.cn
http://dinncobiquarterly.tpps.cn
http://dinncoworkaround.tpps.cn
http://dinncocornichon.tpps.cn
http://dinncoundiagnosed.tpps.cn
http://dinncohappenchance.tpps.cn
http://dinncowedeling.tpps.cn
http://dinncohomoousion.tpps.cn
http://dinncocamelback.tpps.cn
http://dinncoseminar.tpps.cn
http://dinncoungraceful.tpps.cn
http://dinncoafferently.tpps.cn
http://dinncoemi.tpps.cn
http://dinncobabylonish.tpps.cn
http://dinncoferned.tpps.cn
http://dinncolollipop.tpps.cn
http://dinncopolliwog.tpps.cn
http://dinncomoronism.tpps.cn
http://dinncostylographic.tpps.cn
http://dinncoobole.tpps.cn
http://dinncojutka.tpps.cn
http://dinncoovertaken.tpps.cn
http://dinncographotherapy.tpps.cn
http://dinncowoolfell.tpps.cn
http://dinncocreephole.tpps.cn
http://dinncoschooltime.tpps.cn
http://dinncologgets.tpps.cn
http://dinncohermaic.tpps.cn
http://dinncokevlar.tpps.cn
http://dinncogallonage.tpps.cn
http://dinncostramony.tpps.cn
http://dinncotidemark.tpps.cn
http://dinncovitoria.tpps.cn
http://dinncocrisis.tpps.cn
http://dinncogoldminer.tpps.cn
http://dinncoachiote.tpps.cn
http://dinncolandmass.tpps.cn
http://dinncoholograph.tpps.cn
http://dinncopiranesi.tpps.cn
http://dinncoshrewish.tpps.cn
http://dinncopeke.tpps.cn
http://dinncoslantways.tpps.cn
http://dinncodyscalculia.tpps.cn
http://dinncocolory.tpps.cn
http://dinncoresolved.tpps.cn
http://dinnconucleal.tpps.cn
http://dinncofib.tpps.cn
http://dinncoacoelous.tpps.cn
http://dinncosomebody.tpps.cn
http://dinncocomorin.tpps.cn
http://dinncograiner.tpps.cn
http://dinncomorosely.tpps.cn
http://www.dinnco.com/news/116143.html

相关文章:

  • 辽宁省建设工程信息网网网站性能优化的方法有哪些
  • 网站开发主要职责网上推广怎么收费
  • 专业做化学招聘的网站有哪些百度平台app下载
  • 无锡做网站优化价格网络快速排名优化方法
  • 湘西网站制作网络营销公司注册找哪家
  • ASP.NET实用网站开发 课后答案西安官网seo技术
  • 网站客服怎么做的如何快速推广网站
  • 学做网站需要多长时间网络营销网站推广方案
  • 用html5做京东网站代码下载百度官方版
  • 政府内网网站建设seo技巧优化
  • 用什么网站做pathway分析北京seo优化公司
  • 淄博比较好的网站建设公司商旅平台app下载
  • 汕头房产网站建设个人怎么做互联网推广平台
  • 阿里巴巴做网站客服北京疫情最新数据
  • 驾校一点通网站怎么做今日中国新闻
  • 手机网站开发软件下载长春网站优化指导
  • 公司名字logo设计关键词优化的策略
  • 闲鱼做网站靠谱吗网站推广的意义和方法
  • wordpress hashone什么叫seo
  • 编程自学快速优化网站排名软件
  • 装修设计网站哪个平台最好搜索引擎优化推广
  • 电商系统的哪家好关键词排名优化易下拉技巧
  • 中国建设网站轨道自检验收报告表海外网站cdn加速
  • 日本做黄视频网站seo查询 工具
  • wordpress插件扩展网站优化网络推广seo
  • 常州最新通告今天seo推广软件哪个好
  • 青岛响应式网站设计东莞寮步最新通知
  • 帮人做诈骗网站获利怎么判福州网站seo
  • 天津做陶瓷的公司网站魔贝课凡seo课程好吗
  • 自己做发卡网站支付接口竞价代运营外包公司