c语言中指,C语言程序设计中指教学要点分析.doc

C语言程序设计中指教学要点分析

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 个元素组成

的一维数组的指针变量。

图 2 数组指针与二维数组

1.3.3 指针数组。指针数组的实质是数组, 其

定义为:int*p[n];表示数组 P 由 n 个指向整型数据

的指针元素组成。指针数组中的每一个元素都相

当于一个指针变量, 它的值都是地址。用指针数组

来处理不定长的字符串很方便, 例如有几个姓名

字符串需要存储在数组中, 若用一个二维数组来

存储, 由于不知道每个字符串长度, 只能留出尽可

能多的空间, 这样往往会浪费很多内存空问, 而且

对字符串的排序等操作也很麻烦。用指针数组来

定义时, 就不必了解每个字符串的长度, 只要用指

针数组中的元素分别指向它们, 不浪费内存空问,

而且对字符串排序时, 不必改动字符串的位置, 只

需改变指针的指向, 从而大大提高程序的效率。这

个知识点在教学中应注意使学生区分指针数组和

数组指针两个概念。尤其在定义时要注意书写规

范, 不能把指针数组与数组指针的定义混淆。

1.3.4 指向指针的指针。指向指针的指针变量

的一个定义形式为:char **p; 表示指针变量 P 指

向字符指针变量, 或者说 P 所指向的是一个地址。数组指针适用于列宽确定, 行需要动态生

成的场合。指针数组适用于行数确定, 列需要动态

生成的场合。指向指针的指针适用于行列均需要

动态生成的场合。

FurtherDiseussionontheMulti一dimensionalArray & Pointeh

ofCLanguageLearning

C语言多维数组与指针的探讨一、相关知识与概念:

变量的指针:变量在内存中存放的地址。

指针变量:存放变量地址的变量,用来指向另一个变量。

数组:有序数据的集合。数组中的每一个元素都属于同一个数据类型。

数组的指针:数组在内存中存储的起始地址。

数组元素的指针:数组元素在内存中存储的地址。

乙运算符:取地址运算符。翻为变量:的地址。

一运算符:指针运算符(或称为“间接访问”运算符)。`1Ponietr为指针变量i一Pointer所指向变

量的存储单元。

对于二维数组a,可得到下面几个公式:

数组的起始地址:a一a〔0〕~肠[0」〔0」一’a;

第i行起始地址:a〔i]=’(a+i)=腼[i]仁。〕;

数组元素a〔ij〔j〕的地址:阮〔i」〔j」=a[i〕+J=’(a+i)+j;

数组元素a仁i」〔j〕:a〔i〕〔j〕~`(a仁i〕+j)一’(’(a+i)+j);

在计算机内存中存储二维数组是按行存储的,所以知道二维数组的首地址后,数组变量a及具有与

a相同基类型的指针变量Pa,也可以找到其中任意元素的地址:执行Pa二a后,a〔ij[

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值