存储在内存。
“内存块储存变量 int a = 1 的”可以简单具体为:
代码: 全选
+------+
| 1 | 变量的值
+------+
| a | 变量的名称
+------+
| 0001 | 变量在内存中的地址
+------+
像 int a = 1 这种赋值定义后,变量的值,变量的名称和变量的地址都是一一对应的,所以,只要
知道变量的名称或地址就能知道变量的值。
!!为了讲解重点,下面省略了变量名称 a 和地址的对应关系。
代码: 全选
+---------+
| 1 | 变量的值
+---------+
| 0001(a) | 变量在内存中的地址
+---------+
要改变变量 a 的值为 2,可以使用:
代码: 全选
a = 2;
代码: 全选
+---------+
| 2 | 变量的值
+---------+
| 0001(a) | 变量在内存中的地址
+---------+
通过标识符 a 来访问变量 a 的值称为“直接访问”。
对应地,通过变量 a 地址来访问变量 a 的值称为“间接访问”。
声明一个变量用于储存另一个变量的地址:
代码: 全选
int *a_p;
把变量 int a 的地址储存到变量 a_p:
代码: 全选
a_p = &a;
代码: 全选
+---------+ +-----------+
| 2 | | 0001 | 变量的值
+---------+ ... +-----------+
| 0001(a) | | 0100(a_p) | 变量在内存中的地址
+---------+ +-----------+
通过变量 a 的地址来访问变量 a 的值:
代码: 全选
printf(" a = %d ", *a_p);
寻找某地址对应的值”,它被称为“取值符”。
特别要注意,声明 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);
有了基础后,可以马上细品《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
*
*/