本质上指针就是地址,口语中所说的指针,其实就是指针变量,指针变量是用来存放地址的一个指针。
我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是内存中读取的,处理后的数据也会放回内存中。
电脑上内存是8CB/16GB/32GB等,这些内存空间如何高效的管理?
其实就是把内存划分成一个一个的内存单元,每个内存单元的大小取1字节,每个内存单元都有一个编号。
有了内存单元的编号,CPU就可以快速找到一个内存空间。
内存单元的编号 == 地址 == 指针
二、指针变量和地址 2.1 取地址操作符(&)在C语言中,创建变量其实就是向内存申请空间
上述代码创建整型变量a,向内存申请了4个字节,用于存放整数10,其中每个字节都有地址,上图中4个字节地址分别是:
0x00F5FCEC
0x00F5FCED
0x00F5FCEE
0x00F5FCEF
那我们如何得到a的地址?
这里就用到取地址操作符(&)
#include int main(){int a = 10;&a;printf("%p\n", &a);return 0;}上述代码,运行之后,打印:0x00F5FCEC
&a取出来的是a所占4个字节中地址最小的字节的地址。
2.2 指针变量和解引用操作符(*) 2.2.1 指针变量我们通过取地址操作符(&)拿到的地址是一个数组,比如:0x00F5FCEC,这个数组有时候需要存储起来,方便后期使用,那我们就可以把地址值存放在指针变量中。
总结:变量a和指针变量pa都有各自的地址,只是把变量a的地址存放在指针变量pa里。
指针变量也是一种变量,这种变量就是用来存放地址的,存放在指针变量中的值都会理解为地址
2.2.2 解引用操作符(*) #include int main(){int a = 10;int* pa = &a;//取出a地址,并存放在指针变量中//①int说明pa指向的对象是int类型 ②*说明pa是指针变量*pa=100;printf("%d",*pa);return 0;}输出:100
①*的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。 也就是说,解引用是返回内存地址中对应的对象。
解引用也可以改变该变量的数值。
②需要注意的是,在变量