C++的解引用概念

在c++中,*和&在不同的地方有着不同的意义。那么就开门见山先说解引用——解释引用,说的通俗一点就是,直接去寻找指针所指的地址里面的内容,此内容可以是任何数据类型,当然也可以是指针。

复制代码

 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     int *p ,a=6;
 5     p=&a;
 6     cout<<p<<endl;
 7     cout<<*p<<endl;
 8 //    cout<<&*p<<endl;
 9 //    cout<<*(&*p)<<endl;
10     return 0;
11 }

复制代码

上面第4行代码声明一个int类型的指针,以及一个int类型的变量a并初始化为6。此时的*表示声明一个指针p,第5行让指针p指向a的地址。因此第6行输出的是a在内存中的地址。而第7行就是解引用。具体解释指针p所指向的内存地址里存放的内容。

下面介绍引用

1     int *p ,a=6;
2     p=&a;
3     int &c=a;
4     cout<<c<<endl;

&表示的是引用,就表示函数内的变量和主函数的变量是同一个,函数内改变它的值,主函数相应的变量也就跟着改变了;没有&符号,就表示函数内的变量是主函数的变量的一个副本,在函数内改变其值,是不会改变主函数中变量的值的。

下面说一下啥叫脱解引用——就是用&抵消掉*对a的引用效果。

复制代码

 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     int *p ,a=6;
 5     p=&a;
 6     int &c=a;
 7     cout<<c<<endl;
 8     cout<<p<<endl;
 9     cout<<*p<<endl;
10     cout<<&*p<<endl;
11     cout<<*(&*p)<<endl;
12     return 0;
13 }

复制代码

因此代码的第10行输出的是a的内存地址,而代码第11行输出的是a的值。

结果如下

 c++中(.和->)的区别:

A *p则使用:p->play(); 左边是结构指针。
A p 则使用:p.paly(); 左边是结构变量。

  • 23
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值