在程序中声明变量后 , 编译器就会为该变量分配相应的内存单元 。也就是说 , 每个变量在内存会有固定的位置 , 有具体的地址 。由于变量的数据类型不同 , 它所占的内存单元数也不相同 。如下列声明了一些变量和数组 。
【C语言中,指针和指针变量的那些事】int i = 18; // 声明整形变量 i , 并赋值
char c[5] = { 89, 90, 91, 92, 93 }; // 声明字符型数组 c 并初始化
float f = 12.89; // 声明单精度浮点型变量 f 并赋值
double d = 1.414213; // 声明双精度浮点型变量 d 并赋值
在程序编译时 , 编译器将制定这些变量和数组所需要的存储空间长度 。程序运行中 , 则由操作系统为这些变量和数组分配内存单元 。整形变量所占用的内存为 2 字节 , 长度为 5 的字符型数组所占用的内存为 5 字节 , 单精度浮点型变量所占用的内存为 4 字节 , 双精度浮点型所占用的内存为 8 字节 。由于计算机内存最小的寻址单位是字节 , 设变量的存放从内存 3000 单元开始 , 则操作系统为这些变量和数组分配内存单元 , 如下图所示:

文章插图
二维数组在内存中存放的位置示意图
变量在内存中按照数据类型的不同所占内存的大小也不同 , 每个变量都有具体的内存单元地址 , 如变量 i 在内存的地址是 3000 , 占据 2 个字节后 , 数组 c 的内存首地址就为 3002 , 变量 f 的内存地址为3008等 。对内存中变量的访问 , 过去用“scanf("%d", &a)”表达式将数据输入变量的地址所指示的内存单元 。那么 , 访问变量 , 首先因找到其内存的地址 , 或者说 , 一个地址唯一指向一个内存变量 , 称这个地址为变量的指针 。如果将变量的地址保存在内存的特定区域 , 用变量来存放这些地址 , 这样的变量就是指针变量 , 通过指针对所指向变量的访问 , 也就是一种对变量的间接访问 。
假设一组指针变量 pi、pc、pf、pd 分别指向上述的变量或数组 i、c[]、f、d , 指针变量也同样被存放在内存 , 二者的关系如下图所示 。指针变量的存储空间中存放的数据为对应变量或数组的内存地址 , 通过该地址就可以访问对应的变量或数组 。

文章插图
指针变量与所指向变量的映射关系
推荐阅读
- Android 须知2019流行的框架库及开发语言
- 疯狂英语教你快速学英语的秘方 李阳疯狂英语学习方法
- 平安夜说说发什么好 平安夜祝福语大全简短10个字
- 温馨美好的平安夜祝福语 平安夜怎么祝福
- 平安夜简短霸气的祝福语 平安夜祝福语怎么写
- 一位父亲写给青春女儿的话 给女儿的简短青春寄语
- C语言关键字和标识符
- SQL语法,更新数据UPDATE
- Mysql Sql语句注释大全实例
- 马氏文通的横空出世,使中国语言学
