C++实战理解指针本质

前言

参考了这篇大佬的指针文章,以文章总结我这样一个小白对指针的理解

声明、定义和含义

声明语法格式:变量类型* 名称

int* p;		//int类型的指针p
char* a;	//char类型的指针a
double* b;	//double类型的指针b

定义语法格式:变量类型* 名称 = &其他同类型名称

int a = 2;
int* p = &a;
cout << *p << " " << p;
等价于下面
int a = 2;
int *p;
p = &a;
cout << *p << " " << p;

结果均为:
在这里插入图片描述

上面定义的代码可以解释为将变量a的地址赋值给了指针p,为什么呢?
首先要明确定义了指针p后,p表示指针变量,指向的是其他变量的地址;而*p则表示指针变量p所指地址存放的值。这里需要理解计算机程序的原理,我们所写的代码,计算机是需要先找到地址才能找到地址保存的值,所以这样就能够解释指针的本质了。

指针就是通过对变量地址的访问,从而进一步访问到变量值的,所以指针操作效率很高。因为计算机不需要先去找地址再得到变量的值,通过指针可以轻松操作地址,进而操作值

指针与数组

从声明和定义中,我们可以看出指针其实和变量差不多,只不过指针可以很方便地操作地址,比如对于数组

int a[3], * p = a;
a[0] = 5, a[1] = 10, a[2] = 16;
cout << *p << endl;
*p++;	//等价于p++
cout << *p << endl;
*p = 7;
cout << *p << " " << a[1] << endl;

结果:
在这里插入图片描述

之前说过指针也是一个变量,所以自增运算符也是生效的,而且因为数组是连续的地址,所以*p++的意思是先让指针p移动到下一个地址再取值,也就是指针p一开始指向a[0],之后指向a[1]

结果的两个7也很好理解,因为指针拿到了a[1]的地址,所以可以直接操作值,改变指针的值本质是改变了指针指向的地址对应的值,在这里就是a[1]的值

总结

指针通过对地址的访问,进而访问到地址保存的值,以此来进行各种操作

限于文章的篇幅,对于指针的高级操作,可以参考其他文章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值