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