一:先看代码
#include <iostream>
using namespace std;
int main()
{
int i = 0 ;
int j = 5 ;
int * p = &i;
cout<<"*p ="<<*p<<endl;
cout<<"p ="<<p<<endl;
cout<<"&i ="<<&i<<endl;
cout<<"&p ="<<&p<<endl;
cout<<"*&p ="<<*&p<<endl;
cout<<"&*p ="<<&*p<<endl;
return 0;
}
二:查看输出
cyq@cyq-desktop:~/桌面/C$ ./10
*p =0
p =0xbf98eebc
&i =0xbf98eebc
&p =0xbf98eeb4
*&p =0xbf98eebc
&*p =0xbf98eebc
三:解释输出
代码中,指针p指向i,也就是说,p存的是i的地址(即&i),而*p就是i的内容
&p是取变量p的地址。再深一步讲,* 和& 一个是取内容,一个是取地址。
而且两个具有相同优先级,都是从右向左方向结合。所以不难理解
*&p 和 &*p 的结果一样。理解的时候,分别先运算& 和 * 再往前
运算即可。最后给个图表看看就很明白了。
地址 内容 对应
0xbf98eeb4 0xbf98eebc &p p
0xbf98eebc 0 p(&i) i
也就是输出的结果:
&p= 0xbf98eeb4
p= 0xbf98eebc
p(或者 &i)=0xbf98eebc
i=0
*&p=&*p=p 这三个值是一样的。
介绍个在线输入法: http://inputking.com/ime/ime.php
声明:本文档可以随意更改,但必须署名原作者
作者:凤凰舞者 qq:578989855