在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(); 左边是结构变量。

posted on 2019-01-10 19:28  梦之幻璇  阅读(1296)  评论(0编辑  收藏  举报