企业网站建设入账,广州镭拓科技网站建设公司,廊坊seo优化公司,开发网站如何选需要注意什么浅谈c 
在这里开设 浅谈C 系列专题,针对C重点内容展开探讨与观察底层,同时也是一个面试专栏,所选知识大多为面试常见问题.前期较为基础,难度会逐渐上升哦~ 
本专栏采用经典的哲学三段论编写:是什么|为什么|怎么做 力图精简,高效. 
第一章: 浅谈C函数重载 传送门…浅谈c 
在这里开设 浅谈C 系列专题,针对C重点内容展开探讨与观察底层,同时也是一个面试专栏,所选知识大多为面试常见问题.前期较为基础,难度会逐渐上升哦~ 
本专栏采用经典的哲学三段论编写:是什么|为什么|怎么做 力图精简,高效. 
第一章: 浅谈C函数重载 传送门浅谈c什么是引用为什么存在引用我们平常如何使用引用常引用两个重要使用场景做参数做返回值引用与指针的不同点总结什么是引用 
引用不是新定义一个变量,是给已经存在的变量取了一个别名,引用变量不会开辟 新的内存空间,它和它引用的变量共用一块内存空间. 类型 对象名  引用实体;以上是一些使用特征,有 
引用在定义时必须初始化一个变量可以有多个引用引用一旦引用一个实体,再不能引用其他实体 
指针在没有const修饰下可以指向其他地址为什么存在引用 
既然C语言通过指针能够很好的进行内存操作,那为什么会在C新增引用这样的操作. 
C中引用最初是为了解决运算符重载的问题; 
关于运算符重载,我们会在本专栏下一章**浅谈C类和对象**中进行整理. 
另一个特点就是可以引用临时对象;也是类和对象话题. 
实践中,使用指针通常会有: 
空指针野指针人为修改指针变量但不知情 
引用则有: 
引用不允许为空(空指针)定义初始化(野指针)只能指向一个实体(值修改) 我们平常如何使用引用 
常引用 
C语言中我们可以借助const关键字对指针进行控制,引用和指针这么像,那么const可不可以用于引用呢? 产生如上报错 运行成功 
权限的放大这样呢? 运行成功 权限的缩小取别名的原则:对原引用变量,权限只能缩小,不能放大,经过const修饰,权限变为只读. 
那么,我们可不可以给常量取别名呢? 
int a  10;
int b  a;
int c  20;//?当然不可以,原理同上,20作为常量权限为只读,直接进行引用属于权限的放大. 
const int c  20;权限相同即可 
继续观察如下代码 
double d  3.14;
const int e  d;已知引用有必须指向相同类型的特性,为什么这样的代码可以运行呢? 
C语言存在隐式类型转换,C以C语言为基础,沿用了这种特性. 数据转换时会产生临时变量,会把转换后的数据取出存放进来,且具有常性质,是只读的.const引用则指向了这块临时变量,是临时变量的别名. 
之后临时变量会拷贝到e,e的改变不影响临时变量.e是临时变量的别名,不再指向d. 从此,临时变量的生命周期就跟着e走啦!!! 
涉及到了函数传参问题,当函数的参数为引用时,就要注意参数之间的权限匹配问题啦.只能相等或缩小,不能放大. 
//void func(const int x)就可以啦
void func(int x)
{}int main()
{int a  10;const int b  a;func(a);func(b);//是不可以滴return 0;
}两个重要使用场景 
做参数 
void Swap(int x, int y)
{int tem  x;x  y;y  tem;
}
void Swap(double x, double y)
{double tem  x;x  y;y  tem;
}int main()
{int a  0;int b  1;Swap(a, b);double c  1.2;double d  3.4;Swap(c, d);
}不像以前C语言时需要借助指针解引用那么麻烦,传入了变量的别名,指向同一块地址,直接可以进行修改. 
也可以做输出型参数(薄纱C) 
同时传引用的效率高于传值或者传指针20-30倍. 
意义: 
输出型参数减少拷贝,提高效率 
做返回值 
静态变量的补充:在同一个作用域只会初始化一次,指向的是同一块地址. 
传值返回 
int count()
{static int n  0;n;return n;
}int main()
{int ret  count();return 0;
}传值返回过程中,会产生一个临时变量,如果数据较小,将用寄存器代替,如果数据较大,则会在上一层栈帧中开辟预留空间进行拷贝.会先将n传给临时变量,临时变量拷贝到ret;当n没有用static修饰时,在函数栈帧中,出了count的作用域n就会销毁,所以需要临时变量的帮助. 传引用返回 
int count()
{static int n  0;n;return n;
}int main()
{cout  count()  endl;cout  count()  endl;cout  count()  endl;return 0;
}产生一个引用类型的临时变量,相当于临时变量是返回值n的别名,临时变量有传给了count,即把n传回,减少了传值返回临时变量开辟的空间,意味着返回了n的别名. 传值返回:会有一个拷贝传引用返回:没有拷贝,返回的就是返回变量的别名. 
那count函数的空间归还了,n的别名还在吗?,如果我们取消了static修饰并且用ret接收了返回值,那么以后使用ret会出现问题吗? 
这是一个由引用间接引起的野指针问题. 
一般的,如果函数返时,出了函数的作用域,如果返回对象还在没有归还系统,则可使用引用返回,如果已经还给系统,必须使用传值返回,否则就可能会出现越界问题 
与后续知识强相关,在以后章节中细谈. 
引用与指针的不同点 
引用概念上定义一个变量的别名,指针存储一个变量地址引用在定义时必须初始化,指针没有要求引用在初始化后引用一个实体,就不能引用其他实体,指针可以随时指向同类型实体没有NULL引用,但又NULL指针sizeof中,引用为引用类型的大小,指针始终是地址空间所占字节个数引用自加即引用实体增加1,指针自加即指针向后偏移一个类型的大小有多级指针,但没有多级引用访问实体方式不同,指针需要显示解引用,引用由编译器处理引用比指针相对安全 
语法角度来说,引用是一个别名,没有额外开空间 
底层的角度来说,引用与指针的实现方式是一样的 总结 
对C引用的探讨,希望可以帮助到看官 
为了做一个全面的复习,作者决定开始同时开辟**浅谈C与浅谈Linux**两个专栏,交错更新,都是对基础知识的较深探讨,对知识起巩固整理的作用.同时也会穿插一些方法类,框架类,算法相关的零散文章. 
下一章:浅谈C类和对象 
码字不易,期待三连~