注:纯c语言不支持引用语法
一、引用与指针的对垒
1、引用的声明:int a=1;
int &b=a; //必须在声明时初始化
指针的声明:int *p=NULL; //可不初始化,当然,为了防止野指针常初始化为NULL
2、引用只是已定义变量的别名,没有分配存储空间
而指针在声明时是分配了存储空间的
3、用sizeof函数进行求内存大小操作时,sizeof指针 在64位操作系统下永远是8个字节,而sizeof引用 计算出的是它所引用内存的大小
4、引用不能指向常量 int &a=10; 这是不和法的
而指针能指向常量 int *p=10; 不能通过常量指针改变所指对象的值
5、引用声明后,目标变量名有两个名称,即目标变量原名和引用名,并且,该引用名不能再作为其它变量名的别名
而指针声明后能指向其它的变量名
6、引用: 不能建立对数组的引用
指针: 能指向数组
二、引用的用法详解
1、引用作为参数传递
以前大数据作为参数传递的时候,方案采用的方法往往是指针,从而避免数据块整个压入栈,提高程序的效率。
但现在又多了一个同样效率的选择(某些情况下又是必须的选择)——引用
void print_list(int &a){
int b=123456789;
a=b;
}
int main(){
int a=9;
print(a);
printf("%d",a);
return 0;
}
输出结果为 123456789 a的值改变
2、常引用
能在引用前加const就尽量加,作用是不能通过引用变量别名去修改值,提高引用传递的安全性
int a=9;
int &b=a;
a=25;//编译通过,成功修改a 的值
b=25;//编译错误
扩展:指针中的const
1、不能通过const类型的常量指针去修改指针指向变量的值
int a=1,b=2;
const int *p=&a;
a=b;//编译通过,成功修改a 的值
*p=b;//编译错误
2、不能将常量指针赋给非常量指针,反过来可以
const int *p1; //常量指针
int *p2; //非常量指针
p2=p1; //错误
p1=p2; //正确