指针的理解

指针的理解

开发工具与关键技术:Visual Studio、C++
作者:张国军
撰写时间:2019年04月25日

对于指针的理解,刚开始的时候我还是一脸蒙,但是后来逐渐的对指针的理解和对指针的使用,让我感觉到有很多地方都可以用到指针,下面我来为大家讲解一下我对指针的理解。
指针类型变量——能够存放对象地址的变量,简称“指针变量”;指针也是一个变量,它里面存放的东西也是可以改变的,当然是在没有被const修饰的时候。
下边我们来看一个实例:

#include <iostream>
using namespace std;
int main()
{
	int a=100;
	int *p;
	p = &a;
	cout << p<<endl;
	cout << *p<<endl;
}

在这里插入图片描述
这是一个简单的指针指向了变量a的地址,指针里边存放的是地址,(&a)是取a的地址的意思,当我们需要通过p去查看a的值得时候,那么我们就需要通过p里边存放的地址进行解址,(*)是我们的解址符,通过解址我们就可以得到我们想要a的值。
意思就是:比如:你跟我说你家里边有一百条金条,那么你给我一个地址,我需要通过解地址去找到你家,才可以去获取你里边的金条数,获取有多少条。
间的来说就是指针并非是保存着对象的值,而是保存这对象的地址,当我们需要其他操作的时候需要通过解地址去改变。
下边我们来看一个通过指针改变值得一个操作和理解:

#include <iostream>
using namespace std;
int main()
{
	int a=100;
	int b;
	int *p;
	p = &b;
	*p = a / 2;
	cout << p<<endl;
	cout << *p<<endl;
}

在这里插入图片描述
首先我这里是将p指针指向了b,b刚开始是没有值得,我们我们可以通过指针p进行对b的值进行改变,从上面的代码和结果我们可以看出b的值是从(p = a / 2; )这里得来的,所以我们可以通过指针进行解地址对指针对象的值进行改变,前提是我们得指向我们需要改变的对象,然后通过解地址就可以了。
下面我们来看一下指向指针的指针,我们也可以叫它二级指针,从它的字面意思我们可以读到它是一个指针,但是呢,它所指向的不再是我上面的普通变量,而是指向了我们的指针。
指针,我们也知道当我们声明的时候系统将会给我们的指针分配内存的,那么有内存我们也可以想到有相对应的内存地址,所以我们指针也是有地址的。我们从上面也就说了,指针里边存放的是地址,那么我们是否也可以将指针的地址给到另外一个指针里边呢?
下边我们来看一下实例:
在这里插入图片描述
图中我们又声明了一个指针,但是当我们将指针p的地址给到p1的时候编译器给我们报错了,说道:不能将“int
*”类型的值分配到“int*”类型的实体。也就是我们赋值的类型不一致,所以当我们想把一个指针给到另外一个指针的时候我们声明一个(int*)类型是不行的,所以我们需要声明一个(int**)类型的指针,也就是我们的二级指针(指向指针的指针)。

#include <iostream>
using namespace std;
int main()
{
	int a=100;
	int b;
	int *p;
	int **p1;
	p = &b;
	*p = a / 2;
	p1 = &p;
	cout << *p1<<endl;
	cout << **p1<<endl;
}

但我们再从p1那里加一个*的时候,那么他就成了我们的二级指针,二级指针跟我们的一级指针取值是一样的,但我们需要二级指针里边的东西的时候,那么我们需要解址,

那么当我们刚开始解(*p1)的时候,我们解出来的是我们一级指针p的地址,当我们再进行解址的时候,我们才能解到b的值。
也就是我们需要进行解址解到最里边的话,那么我们就需要一层一层的解进去。
大家也不难猜到还有三级指针,或以上的指针,它的用法跟我们的二级指针差不多的了,
各位需要用到什么指针那就看你们需要怎么用。
这纯属是我个人的理解,如果大家有什么不同之处,欢迎大家分享讨论;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值