! 引 言
!语言具有较强的数据表达能力和丰富的运算符! 使用 灵活
方便!易于移植!生成 的目标代码 效率高!既有高 级语言的 优点!
又具备低级语言的许多特点" 因此!! 语言 "# 多年来在许多领域
得到了广泛的应用!许多高校和职校把它作为编程的首要教学 语
言!也是 进一步 学习数 据结构#算 法分析 #操 作系 统#!$$和 %&’&
语言等课程的前导课程"
但相比与其它一些高级语言!! 语言牵涉到的概念复杂!规则
繁多!容易使学生感到困惑和迷茫" 我们在长期的教学过程中!发
现学生 的学习难点 主要集中 在多维数组 指针的运 算和对递归 概
念的理解上 !因此 !针 对这两个难 点!不断改进教 学方法!在教 学
中引入图示法和类比法!取得了较好的教学效果"
" 多 维数组 指针 运算 的教 学
一维数组的指针运算学生较容易理解!但多维数组的指针 运
算是教学中 的一个难 点!为此在教学 中我们引 入了面指针 #行 指
针和列指针等概念"
我们知道 在 ! 语言中!一个二维数组可以看成是一个一 维数
组!其中每个元素又是一个包含若干元素的一维数组"
假如有定义$()* &+" ,+-,.
则 ! 语言编译程 序认为二维数组 & 是由 & +#, /&+0, 1&+2,三个 元
素组成的一维数组!&+#,#&+0,和 &+2,分别是包含四个元素的一 维数
组名!如图 0 所示"
图 ! 二维数组指针
二维数 组名 & 代表 第 # 行 的首地 址!&$( 代表 第 ( 行 的首 地
址!每加 0 刚好跳过一行!所以 &和 &$( 可以看作是行指针"
34&5(6!即 &+( ,!是一维 数组名!代表第 ( 行第 # 列 的地址!37&5
(859 代表第 ( 行第 9 列的地址!它们可以看作是列指针"
而 3434&5(8598代表第 ( 行第 9 列上的元素!即 &+( ,+ 9,"
从 而可得出以 下结论$行指针 前加 3 号 得到列指针 !列指针
前 加 3 号得到 元素!所以可把 行指针看 作是二级指 针!即指向指
针的指针!而列指针可看作是一级指针!即指向数据的指针"
对于更复杂的三维数 组可引入面指针!面指针 前加 3 号得到
行指针!形成立体访问机制"
假如有定义$() * : +2 ,+" ,+", .
图 " 三维数组指针
如上图所示!三维数组名 : 代表第 # 面的首地址!:5( 代表第
( 面的首地址!每加 0 刚好跳 过一面!所以 : 和 :5( 可以看作是面
指针!属于三级指针"
34:5(8!即 :+(,!可看作是二维数组名!代表 第 ( 面首行的地址!
34:5(859 代表第 ( 面第 9 行的地址!它们可以看作是行指针"
3434:5(8598!即 :+( ,+ 9,!是一维数组名 !代表第 ( 面第 9 行第 # 列
的地址!3434:5(85985; 是第 ( 面第 9 行第 ; 列的地址!属于列指针"
而 343434:5(85985;8代表第 ( 面第 9 行第 ; 列上的元素!即 :+(, +9 ,+; ,"
引 入了面指针 #行 指针和列指 针的概念 后!再教授指 针数组
时!学生就较易理解!指针数组中的元素可以看作是列指针!一维
指针数 组名可看作是行指针!而二维指针数组名则 可看作是面指
针"
通过上面的讲述!再给出定义 $()* 3<=&/ 3<
:. 这里 < 是一级指针变量!<< 是二级指针变量!<<< 是三级指针
变量" 学生就很容易明白为什么