目录
6.2.3 指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性
1.内存和地址
在计算机中把内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。其中,每个内存单元,相当于⼀个学⽣宿舍,⼀个字节空间⾥⾯能放8个⽐特位,就好⽐同学们住的⼋⼈间,每个⼈是⼀个⽐特位。每个内存单元也都有⼀个编号(即为地址)(这个编号就相当于宿舍房间的⻔牌号),有了这个内存单元的编号,CPU就可以快速找到⼀个内存空间。C语⾔中给地址起新的名字叫:指针。内存单元的编号 == 地址 == 指针。
计算机中内存大概如下图:
2.指针变量和地址
2.1 取地址操作符(&)
在C语⾔中创建变量其实就是向内存申请空间,⽐如:
⽐如,上述的代码就是创建了整型变量a,内存中申请4个字节,⽤于存放整数10,其中每个字节都有地址。上图中4个字节的地址分别是:
通过取地址操作符(&)可以获取变量a的地址:
通过上述第五行的取地址操作,获得变量a的地址为0x006FFD70。 虽然整型变量占⽤4个字节,我们只要知道了第⼀个字节地址,顺藤摸⽠访问到4个字节的数据也是可⾏的。
2.2 指针变量和解引⽤操作符(*)
2.2.1 指针变量
我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x006FFD70,这个数值有时候也是需要存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?答案是:指针变量。指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。注:我们在学习或工作上口头通常说的指针实际上就是指的指针变量。
2.2.2 如何拆解指针类型
这⾥pa左边写的是 int* , * 是在说明pa是指针变量,⽽前⾯的 int 是在说明pa指向的是整型(int)类型的对象。
2.2.3 解引⽤操作符
我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*)。
#include <stdio.h>
int main()
{
int a = 100;
int* pa = &a;
*pa = 0; //对指针pa进行解引用*pa == a ,修改a变量的值
return 0;
}
2.3 指针变量的⼤⼩
结论:
• 32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
• 64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
• 注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。
3.指针变量类型的意义
3.1 指针的解引⽤
代码1:
//代码1
#include <stdio.h>
int main()
{
int n =