|
程序运行时,数据储存在储存器(内存、硬盘和中央处理器寄存器),大部分时候,程序相关数据都
存储在内存。
“内存块储存变量 int a = 1 的”可以简单具体为:
- +------+
- | 1 | 变量的值
- +------+
- | a | 变量的名称
- +------+
- | 0001 | 变量在内存中的地址
- +------+
复制代码
像 int a = 1 这种赋值定义后,变量的值,变量的名称和变量的地址都是一一对应的,所以,只要
知道变量的名称或地址就能知道变量的值。
!!为了讲解重点,下面省略了变量名称 a 和地址的对应关系。
- +---------+
- | 1 | 变量的值
- +---------+
- | 0001(a) | 变量在内存中的地址
- +---------+
复制代码
要改变变量 a 的值为 2,可以使用:
- +---------+
- | 2 | 变量的值
- +---------+
- | 0001(a) | 变量在内存中的地址
- +---------+
复制代码
通过标识符 a 来访问变量 a 的值称为“直接访问”。
对应地,通过变量 a 地址来访问变量 a 的值称为“间接访问”。
声明一个变量用于储存另一个变量的地址:
变量 a_p 前有一个星号表示它是一种特殊变量,只能储存 int 类型变量的地址。
把变量 int a 的地址储存到变量 a_p:
变量 a 前加一个德尔塔符表示寻找它的地址出来,德尔塔符又称为“寻地址符”。
- +---------+ +-----------+
- | 2 | | 0001 | 变量的值
- +---------+ ... +-----------+
- | 0001(a) | | 0100(a_p) | 变量在内存中的地址
- +---------+ +-----------+
复制代码
通过变量 a 的地址来访问变量 a 的值:
- printf(" a = %d ", *a_p);
复制代码
变量 a_p 前加一个星号表示把它的储存的地址 0001 所对应的值寻找出来。由于这时的星号表示“
寻找某地址对应的值”,它被称为“取值符”。
特别要注意,声明 int *a_p 与 printf(" a = %d ", *a_p) 中的星号名称和作用都不一样,前者
表示“a_p 是一种特殊变量,只能储存 int 类型变量的地址”,后者表示“寻找 a_p 所储存的地址
对应的值”。
通过变量 a 的地址改变变量 a 的值:
- *a_p = 4;
- printf(" a = %d ", *a_p);
- printf(" a = %d ", a);
复制代码
变量 a_p 前加星号表示修改“ a_p 所储存的地址对应的变量”的值,而不是变量 a_p 自身的值 0001。
有了基础后,可以马上细品《The C Programming Language,Second Edition》中指针一章,深入学习指针。
参考文献
《The C Programming Language,Second Edition》,Brian W. Kernighan & Dennis M. Ritchie 著
《Expert C Programming:Deep C Secrets》,Peter Van Der Linden 著
/*
*
* Power by shuge.org & lee
*
* Last Modified: 2008-05-07
*
*/ |
|