注:(const指针在这里代表的是指向变量的指针,常指针不考虑)
相同点:
1.一个const引用可以引用一个非const变量
int a = 3;
const int& b = a;
一个const指针可以指向一个非const变量
int a = 3;
const int* b = &a;
2.一个const引用可以引用一个const变量
const int a = 3;
const int& b = a;
一个const指针可以指向一个const变量
const int a = 3;
const int* b = &a;
3.一个非const引用不可以引用一个const变量
const int a = 3;
int& b = a;//是错误的,可以通过b来改变的a的值,但是a在这里是常量,不可以改变
一个非const指针不可以引用一个cosnt变量
const int a = 3;
int* b = &a;//是错误的,可以通过b来改变的a的值,但是a在这里是常量,不可以改变
4.指向的都是变量的内存地址。
不同点:
1.引用是一个变量的另外一个名字
定义方式:
int a = 3;
int& b = a;//储存的是值
指针是一个变量的拷贝,复制体
int a = 3;
int* b = &a;//储存的是地址
2.定义:
引用只能对已经存在的变量或对象实现引用
而指针则不需要,可以定义为空;
3.传参:
如果传递的是一个引用,意味着这个变量或对象已经存在了;
如果传递的是一个指针,则不能判断这个指针是不是有效的,是不是空的 ... ...
所以,引用较为安全。
虽然传引用较为安全,但是也是利用指针来实现的,所以指针的效率要比引用高一些。
4.引用直接去访问变量,不用分配自己的内存空间,而指针是间接访问,需要有自己的内存空间
例子:
//传引用实现两个变量的值的交换
#include<iostream>
void sw(int &,int &);//声明
int main(int argc,char *argv[]){
int a = 100;
int b = 999;
sw(a,b);
printf("a=%d\n",a);
printf("b=%d\n",b);
}
void sw(int& x,int& y){
int temp = 0;
temp = x;
x = y;
y = temp;
}
//传引用直接可以把定义的两个变量赋给函数
//而传指针要定义两个指针,然后进行传递
#include<iostream>
void sw(int *,int *);//声明
int main(int argc,char *argv[]){
int a = 100;
int b = 999;
int* x = &a;//定义指针
int* y = &b;//定义指针
sw(x,y);//传指针
printf("a=%d\n",a);
printf("b=%d\n",b);
}
void sw(int* x,int* y){
int temp = 0;
temp = *x;
*x = *y;
*y = temp;
}