前言
指针其实没有大家想象的那么难
指针是学习c语言或者c++无法逃避的一个坎,很多同学就是在指针这一part道心崩溃最终放弃的.今天我将尽我所能把指针讲得浅显易懂.
一、指针是什么?
众所周知,内存是我们电脑运行的重要一环.我们现在的内存动不动就要16G或者32G.所以,为了更好地管理我们的内存单元,设计师将电脑划分为一个个内存单元–字节,并给他们进行编号.这些字节的编号就是这些内存单元的地址,也就是指针.存放这些编号的叫做指针变量.,
这就像是小区里为了更好地管理业主的房子,给我们分配了一个个门牌号.例如门牌号是104.我可以根据这个门牌号在一个小区里精准定位到你家.这个门牌号就是指针.
如果我用变量来存储这个门牌号,那么这个变量就叫做指针变量.
二、使用步骤
1.引入库
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
//&是取地址操作符,&a就是把a的地址提取出来
int* pa = &a; //*pa表示pa是指针变量,
//int表示*pa所指向的变量a的数据类型为整型
*pa = 20;//这个的*pa等价于a
printf("%d\n", a);
return 0;
}
int* pa = &a中 pa表示pa是指针变量, int表示pa所指向的变量a的数据类型为整型
pa = 20中pa等价于a,相当于通过pa存放的地址去找到a,从而修改a的数据.
注意事项
1.int * pa 中存放的内容只能是地址
2.我们口头语中的指针,通常指的是指针变量
2.指针变量的大小跟类型没有关系
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(double*));
printf("%d\n", sizeof(long long*));
return 0;
}
输出结果
不难看出,指针变量的大小跟指针变量的类型没有关系
原因
我们的电脑是分32位和64位,上面代码的运行环境是x64,处于64位.所以指针变量的大小是64个bit,也就是8个字节
x86是32位的,所以指针变量的大小是32比特,也就是4个字节.
通俗一点来说,64位可以表示为64根并联的地址线,每根地址线的通电与否用来表示0或者1.这样组合而成的结果有2的64次方可能.每一种可能都是我们存储单元–字节的编号,也就是地址–指针.存储这些地址的就需要64个比特位 = 8个字节
这也就解释了在32位电脑的环境下,我们内存最高才有4G.
字节(B)–KB–MB–GB中间的转换是2的10次方.
2的32次方(B) = 2的22次方(KB )= 2的12次方(MB) = 2的2次方(GB) = 4GB
指针变量的大小取决于地址的大小
总结
这里对文章进行总结:
1.内存会划分以字节为单位的内存单元;
2.每个内存单元都会有编号 = 地址 = 指针;
3.地址要存储起来,给一个变量,就叫做指针变量.int * pa = &a;
4.pa中存放a的地址,通过pa的地址找到a–*pa.*pa等价于a