欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

引用(&)

程序员文章站 2022-03-03 08:41:47
...

1、 引用(&)是对象的别名,不是新定义一个变量,对引用的操作与对对象的直接操作完全相同。引用本身不是一种数据类型,不占内存,系统也不给引用分配存储单元,因此对引用求地址就是对目标变量求地址。

2、 引用声明的时候必须初始化,且必须以对象初始化(初始化是指明引用指向哪个对象的唯一方法)。

int ival = 1024;
Int & refVal = ival;
Int & refVal2;  error
Int &refVal3 = 3; error //必须以对象初始化

3、 当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象,不能再指向其他对象。

4、 Const 引用是指向const对象的引用,非const引用只能绑定到与该引用同类型的对象

     Const 引用则可以绑定到不同但相关的类型的对象或绑定到右值

5、 引用作为形参的优点:

关键:引用作为形参传递的地址,而普通参数是值传递。

优点:

   (1)、作为引用的形参被修改的同时,也修改了对应的实参的值。而使用普通参数做形参时,对应的实参值不会被修改。

   (2)、普通参数作形参时会对形参进行复制,而引用参数是对实参的直接操作,因此不会浪费额外的内存空间,有助于提高效率。

6、如果既要使用引用提高效率,又要保护传入参数在函数中不被改变,就要使用常引用。

 Const int ival = 1024;
 Const int &refVal = ival; ok
 Int &ref2 = ival; error

补:const限定符修饰的对象因为是常量,所以一经定义便不可修改,所以定义时必须初始化。

7、使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。

8、指针与引用的区别

    1:引用是变量的一个别名,内部实现是只读指针

    2:引用只能在初始化时被赋值,其他时候值不能被改变,指针的值可以在任何时候被改变

    3:引用不能为NULL,指针可以为NULL

    4:引用变量内存单元保存的是被引用变量的地址

    5:“sizeof 引用" = 指向变量的大小 , "sizeof 指针"= 指针本身的大小

   

char *b = "helloworld";  
char *c[10];  
double *d;  
int **e;  
void (*pf)();    
  
cout<<"char *b = /"helloworld/"     "<<sizeof(b)<<endl;//指针指向字符串,值为4  
cout<<"char *b                    "<<sizeof(*b)<<endl; //指针指向字符,值为1  
cout<<"double *d                  "<<sizeof(d)<<endl;//指针,值为4  
cout<<"double *d                  "<<sizeof(*d)<<endl;//指针指向浮点数,值为8  
cout<<"int **e                  "<<sizeof(e)<<endl;//指针指向指针,值为4  
cout<<"char *c[10]                "<<sizeof(c)<<endl;//指针数组,值为40  
cout<<"void (*pf)();              "<<sizeof(pf)<<endl;//函数指针,值为4

    6:引用可以取地址操作,返回的是被引用变量本身所在的内存单元地址

    7:引用使用在源代码级相当于普通的变量一样使用,做函数参数时,内部传递的实际是变量地址


相关标签: C 引用