很多小伙伴觉得指针是一个特别难的东西,那只是你没有看清楚指针的本质,看完我这篇,你会发现真的超级超级简单
int a=3;
比如说我现在定义一个整型变量a=3,那这个代码的本质是什么? 当程序读到这段话的时,自动的就会在底层开辟一个空间,这个空间的名字就叫a,里面存的值就是 3 如图所示
如果是这个代码呢
int *b=&a;
它的本质不也就是在底层开辟一个空间,这个空间的名字叫b,存的是数据就是变量a的地址,那为什么可以变量b可以存变量a的地址,因为b是整形指针数据类型,它可以存整形变量地址,如图所示
那我怎么验证b变量存的是a的地址呢?
很简单,打印a的地址和b变量不就行了
cout<<&a;
cout<<b;
你们自己去试一下
好,那我现在想知道a变量的值,我们该怎么做,第一种方法,当然是直接输出a,但是我现在想通过输出a变量的值,那我们应该如何做呢?很简单,解开b,此话怎么理解,就是于解开a的地址,你只有解开a的地址才能拿到a变量 那怎么解 在变量b面前加 *号(我们这个操作更专业一点就叫解引用)
代码演示
cout<<*b
此时*b的值就是a的值3
以后遇见2级指针就可以存1级指针d地址 也就是说 int** 可以存 int*
3级指针可以存2级指针的地址 int*** 可以存 int**
依次类推
完整代码
#include<iostream>
using namespace std;
int main()
{
int a = 3;//定义整形变量
int* b = &a;//定义整形指针变量存储变量a的地址
cout <<"a变量地址是:" << &a<<endl;//打印a变量地址
cout <<"b变量的值是:"<<b<<endl;//打印b变量
cout << "变量的值是:" << a<<endl;
cout << "*b的值是:" << *b;//解引用b
return 0;
}
运行效果:
指针是不是超级简单!!!!!