一、指针变量定义
int *p; //定义指针变量p,存放的数据是整数类型的地址
二、指针变量赋值
int b = 100;
int *p; //定义指针变量p
p = &b; //赋值(b的地址)给指针变量p
cout << p << endl; //指针变量p的值是地址 0x6ffe14(也就是b的地址)
&
是取地址符。
三、指针变量多次赋值
int b = 100;
int *p;
p = &b;
int c = 200;
p = &c; //赋值(c的地址)给指针变量p
四、解引用
#include <iostream>
using namespace std;
int main(){
int b = 100;
int *p = &b;
cout << *p << endl; //取值 100
return 0;
}
*p
的*
是解引用指针运算符,可以获取p
指向的地址中的值(也就是b)。
五、*&p
和 &*p
的区别:
#include <iostream>
using namespace std;
int main(){
int b = 100;
int *p = &b;
cout << "*&p : " << *&p << endl;
cout << "&*p : " << &*p << endl;
return 0;
}
1、*&p
是右结合的,也就是先计算&p
,得到 p 的地址,*(&p)
解引用,获取地址里对应的值,也就是b的地址;
2、&*p
也是右结合,也就是先计算*p
,进行解引用,获取p指向地址的值,也就是b,&(*p)
就是再取b的地址;
3、所以,它们得到的结果是一样的,都是b的地址。
注意:不能解引用非指针变量。