C++ 引用基本用法


引用基本用法(所谓的引用,就是取别名)
引用是c++对c的重要扩充。在c/c++中指针的作用基本都是一样的,但是C++增加了另外种给函数传递地址的途径,这就是按引用传递( pass-by-reference),它也存在于其他一些编程语言中,并不是c++的发明。
■变量名实质上是段连续内存空间的别名,是一个标号门牌号
程序中通过变量来申请并命名内存空间
■通过变量的名字可以使用存储空间
对一段连续的内存空向只能取一个别名吗?
C++中新增了引用的概念,引用可以作为一个已定义变量的别名。中

引用必须初始化

b已经初始化了,不可以再被c修改了(b只能是a的引用了,不可以再变为c的引用)

给数组建立引用

先定义一个数组类型的别名,即定义一个数组类型,然后定义一个引用   (typedef  BYTE  T_IMSI[8]; )

在32位的系统中,下面程序的输出为:

typedef unsigned char ARRAY[100];

void testReference(const ARRAY supi1, const ARRAY& supi2)

{

    printf("%d,%d", sizeof(supi1), sizeof(supi2));

}

A. 4,100

B. 100,100

C. 100,4

D. 4,4

正确答案: A
答案解析:

数组以传值的方式作为函数入参时,会退化成指针,但是以传引用的方式作为函数入参时,不会退化。

注意事项:

如下代码,VS中,第一次可以打印,但是后面再打印就会报错,因为引用了返回的局部变量时,编译器做了优化

局部变量销毁后还再使用,很危险

3. 返回引用(返回值是引用类型),可以作为左值

4. 引用的本质是指针常量,指针常量必须要初始化,所以引用必须要初始化(const离谁近,修饰谁)

-----编译器自动帮忙转换(取*,加& ....等等)

5. 指针的引用

eg. 不用引用的方法(二级指针)

/*

使用二级指针的原因:

假设是这样
void get(int *p,int num)
{
p=(int *)malloc(num*sizeof(int));
return;
}

调用函数:
int *pi;
get(pi,10); 

get函数里的这个参数p只是pi的一个副本,get函数结束后就没了,malloc分配的内存首地址也没带出来,pi还是原来的pi没变,还发生了内存泄漏。只能改变 *p 的值并带回。


想用一级指针当参数 可以这样:
int* get(int *p,int num) //返回指针

*/

eg. 指针引用(替换**二级指针),更简洁,好理解

6. 常量的引用 (常引用)  (const是用来辅助阅读代码的(别人阅读),所以最好不要间接修改他的值):

const int &ref

const 防君子不防小人

修饰形参为只读

发布了144 篇原创文章 · 获赞 58 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qqyuanhao163/article/details/100068037