C语言程序设计中指针教学要点分析
徐 兵
( 广东海洋大学信息学院, 广东 湛江 524088)
1 指针知识单元构成
1.1 指针定义
在计算机内存中, 每一个存储单元(通常为 1
字节 )都有一个固定的编号, 就像酒店中的房间号
码一样, 这个编号就称为地址, 如图 1 所示。变量
P 和 x的地址分别是 3610 和 2000, 相当于房间
号。在地址所标识的内存单元中存放数据, 如在变
量 x的单元中存放一个数 9, 这就相当于酒店中各
个房间里居住的旅客一样。
&x为变量 x的地址,*p 为指针变量 p 所指向的存储
单元。应该注意的是在定义时 * 只起说明作用, 不
是运算符。
比如下面的语句中:float x= 1.5; float
*P= &x; float *P= x; 根据指针的定义很显然第 2 条语句是正确的。迷
惑的原因就在把 * 当成了运算符。其实, 这里的
float * 共同来修饰 P, 定义一个指向浮点型的指
针变量, 同时要将一个指针 &x赋值给 P。1.3 指针与数组
1.3.1 指针与数组区别。在 C语言中数组与指
针的关系非常密切, 但它们还是有着本质上的区
别。指针可以随时指向任意类型的内存单元, 它的
特征是可变。所以我们常用指针来操作动态内存。
当数组作为函数的参数进行传递时, 该数组自动
退化为同类型的指针。例如:char x []="china";
char *p="china"; 上述两个变量的内存布局情况
是:数组 x需要在内存中占用 6 个字节的空间。这
段内存区通过数组名 x来标志。指针 P 则需要 4
个字节的空间来存放地址, 这 4 个字节用 P 来标
志。其中存放的地址几乎可以指向任何地方,也可
以哪里都不指。目前这个 P 指向某地连续的 6 个
字节即字符串"china"。在教学过程中应该注意使
学生能够正确认识数组与指针的区别, 并正确运
用它们。
1.3.2 数组指针。数组指针的实质是指针, 其
定义为:int (*p)[n]; 表示 P 为指向由 n 个元素组成
的一维数组的指针变量。