指针和引用的区别

今天上机课比较无聊,看了一道比较经典的面试题:请说说指针和引用的区别?

话不多说,捋起袖子撸代码,实践出真知,先贴上代码:

#include<iostream>

using namespace std;

int main(){

char text='a';
char &text1=text;
char *text2=&text;

cout << "text值: " << text << " text1值:" << text1 << " *text2值:" << *text2 <<endl;
cout << "text地址: " << (void*)&text << "  text1地址:" << (void*)&text1 << "  text2地址:" << (void*)&text2 << endl;
cout << "text1++的值: " << ++text1 << "  text2++的值: " << (void*)(++text2) << endl; 
cout << "sizeof(text): " << sizeof(text) << " sizeof(text1): " << sizeof(text1) << " sizeof(text2): " << sizeof(text2); 

return 0;
}

运行结果:
这里写图片描述

结果分析:
首先,我将text赋值为a,由于text1是text的引用,故text1的值也是a,text2指向存储text的内存空间,*text2的值自然也是a;

其次,输出text的地址,为0x22fe27,再来看text1的地址,同样是0x22fe27,而text2的地址为0x22fe18,由此可知,引用事实上就是给内存区域起了个别名,text和其引用text1所代表的内存区域是一样的,而指针则需要另辟一块内存空间,存放一个指向text的指针;

第三,引用自增自减就相当于被引用变量的自增自减,原因是他们都是代表的同一块区域,而指向text的指针text2自增自减则相当于指针向左或向右移动,本例中text2为char型指针,故自增为向右移动一个地址空间;

第四,sizeof(引用),其返回的值为被引用变量的数据类型长度,sizeof(指针)返回的是指针的长度,在64位系统中,其长为8,不管是char型指针、double型指针还是指向一个类的指针。

除此之外,指针和引用还有其他不同之处:

引用在被定义之后,便不能再被更改,若对引用再次赋值,则编译器会报错[Error] lvalue required as left operand of assignment;而变量则不然,除非使用了const关键字,否则它还可以指向其他区域。

引用不能被赋空值,而指针却可以指向NULL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值