c语言初学-引用和指针的异同点

注:(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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值