C++指针与引用的区别(手写)

指针和引用都是在写程序的时候经常用到的。通过指针和引用我们可以通过传形参来灵活的改变相关的参数。比如做交换时

void swapdata(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

或者通过指针

void swapdata(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

区别:

(1)引用被创建时一定要被初始化,否则就会报错。但是指针就不同了,它可以随时随地初始化(想什么时候初始化就初始化)。未被初始化的指针将指向随机的地址,这样就会造成隐患

'b' declared as reference but not initialized|

(2)引用一旦被指向一个对象,就不能再指向另一个对象了。如果改变就会编译出错

     就好比小明有一天被起了个外号叫狗蛋,那么我一想起狗蛋就知道是小明。然后呢小刚有被起了个外号也叫狗蛋.那么狗蛋到底是小明呢还是小刚呢(二义性)。

 int a=100;
     int &b=a;
       int c=200;
       &b=c;
lvalue required as left operand of assignment|

但是指针就不一样了,因为指针为一个地址空间,它存储着被指向对象的地址。所以它可以随时改变被指向的对象。

(3)引用必须是一个合法的引用,也就是说null引用不存在

(4)引用不分配内存单元,而指针分配相关的内存单元(间接引用)。

(5)没有const引用,但存在const指针.因为引用一旦被初始化就无法再改变了,所以const也就没得用了

(6)sieof(引用) 返回的是被引用对象的大小,而sizeof(指针)返回的是被指向对象的地址的大小

 double a=100;
     double &b=a;
      double *c=&a;
   cout<<"a变量的大小="<<sizeof(a)<<"   "<<"a变量的大小="<<sizeof(b)<<"   "<<"a地址的大小="<<sizeof(c)<<endl;

这里的输出结果为:

 

(7) 在进行相关的参数传递时,指针是形参的拷贝,而引用为实参的传递。就是说指针作为形参的时候,接受到的是一个实参的地址。而引用作为形参的时候就是给形参另起了一个别名(直接操作实参)

 

 

(8)不存在引用的引用(难道外号还有外号吗?),但是存在指向指针的指针(因为指针存在相关的内存空间)

(9)对于自增符号来说,指针的自增为指向地址的改变,而引用的自增为被引用数的改变。

                简单来说:指针分配空间,存储着被指向对象的地址。但是引用只是一个别名而已,并不为其分配存储空间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值