1.地址
如int a = 5;int* p = &a
,这里p是指针类型,存储的是地址值如0x61fe14
2.寻址
*p
可以用于寻址,拿着p存储的地址值去解引用
3.与其他基本数据类型区别
-
其他基本数据类型只有
存储数据
的功能,没有其他的功能 -
其他基本数据类型,不能直接
取地址值
,直接取地址值适用于指针类型
4.多级指针
-
①简单来说,就是二级指针存储的
应该是一级指针的地址
,如int **p1 = &p
,这里赋值的是一级指针的地址②解一个引用得到一级指针内容
,解两个引用得到二级指针内容 -
解引用
得到的都是对应地址的内容&
得到的都是对应变量的地址对指针赋值
赋值的都是地址
- 总结:解引用和指针都是
存储的内容(数据或地址)
,而&得到的是这个变量的地址值
-
代码验证:
//测试代码 #include<iostream> using namespace std; int main(){ int a = 5; int* p1 = &a; int**p2 = &p1; // int**p3 = &a; 不被允许,必须为一级指针的地址 cout<<&a<<endl;//0x61fe14 cout<<"-------------------"<<endl; cout<<"p1的值为: "<<p1<<endl;//p1的值为: 0x61fe14 cout<<"&p1的值为: "<<&p1<<endl;//&p1的值为: 0x61fe08 cout<<"*p1的值为: "<<*p1<<endl;//*p1的值为: 5 cout<<"-------------------"<<endl; cout<<"p2的值为:"<<p2<<endl;//p2的值为:0x61fe08 存储p1的地址 cout<<"*p2得到的内容:"<<*p2<<endl;//*p2得到的内容:0x61fe14 就是p1存储a的地址 cout<<"**p2得到的内容:"<<**p2<<endl;//**p2得到的内容:5 return 0; }