一、指针变量-地址-内存
指针变量:保存 内存地址编号 的 变量
(普通变量 和 指针变量 分别保存数字20时,指针变量 会认为他保存的是 内存地址编号 20)
地址:系统为 内存的每一个字节 分配的一个 32位 的编号 (虚拟地址)
- 32位平台,每个进程有 4G(寻址能力2^32字节=4G) 内存空间 ;
故即使有10G的内存,也只能读取4G;
因此如果有8G内存,建议装64位系统
- 指针 即 地址,指针变量 指向 地址,地址 是 内存编号,即 指针 指向 内存编号
- 32位平台下,不管什么类型的地址,都是4字节(32比特位),
即 任何类型指针变量 都是 4字节大小
- int 变量 num; 则 &num 指 首地址
问1:为什么 32位系统任何类型指针变量 都是 4字节大小?
(1)任何类型:
空间大小 和 里面存的东西是什么类别 无关
(2)4字节:
指针变量 指向 内存地址编号,
32位系统中每个内存编号是32位即4字节,
故 指针变量 拥有4字节空间
问2:4字节内存空间对应4个地址(16字节),怎么存的下?
1个指针变量一次只指向1个地址
二、指针变量
1.指针变量的定义:
定义步骤
将(*指针变量名)替换 保存地址的对象名
【定义时 * 为 指针变量声明符;引用时为 解引用符 】
(*p)替换 int num 中的num,据优先级判断可否去掉括号
- 定义一个指针变量p,保存 int num 的地址: int *p
- 定义一个指针变量p,保存 int arr[5] 的首地址: int (*p)[5]
- 定义一个指针变量p,保存 int *q 的首地址: