一本支持研究型教学的C语言教材(二)

其次,现行C语言教材中许多知识点都介绍得吞吞吐吐模棱两可,本教材中C语言的每个知识点不仅准确而且都经过一番分析研究,知识点有什么用,怎么用清清楚楚明明白白。例如,表达式用于“操作”计算机进行运算,表达式的求值过程就是计算机的执行过程。表达式的求值规则就是序列点、优先级、结合性和数据类型。现行教材中大多不提序列点,如果不讲序列点就不能理直气壮地分析一些表达式如逗号表达式的求值顺序,读者遇到复杂的表达式时就更不敢主动分析了。本教材中不仅引入了序列点的概念从而准确全面地分析了如何对表达式求值,而且还引导读者分析“为什么这个操作符有序列点?”。此外,变量定义(声明)语句的分析过程同表达式求值,如表达式中可以加括号,而在定义(“声明”)语句中也可以加入括号,即语句float ((f));与语句float f;等价。因此,一些复杂语句常用确定表达式求值顺序的方法来分析,如语句int (*pf)(int,int);定义了一个指针变量pf,因为标识符pf先与*号结合;而语句int*pf(int,int);中标识符pf先与圆括号操作符结合,它是一个函数名,整个语句是一个函数声明语句。掌握了如何确定表达式求值顺序的原则后,当遇到分析(*(void(*)())0)()的问题时就不会“手忙脚乱”或认为其“深不可测”了。这个问题出自《C陷阱与缺陷》,被一部分网友奉为经典,它其实更像是对现行C语言教材的讽刺。C语言号称表达式语言,但教材竟讲不清表达式求值!

“指针”是C语言的精华,但是,现行教材中“指针”的概念最难懂,其与数组的关系更是让读者摸不着头脑。本教材从C语言与计算机关系出发,把“指针”的概念分析研究得清清楚楚明明白白。变量是C语言中使用计算机中存储单元的一种方式。整型变量相关的存储单元中存储整数,浮点型变量相关的存储单元中存储小数,指针变量相关的存储单元中存储指针。指针是什么呢?指针是某存储单元的地址。不能说指针是“地址”,只可以说指针是某类型的地址。指针变量有什么作用呢?通过分析可知:通过指针变量借助“间接引用”,C语言中又多了一种使用计算机中存储单元的方式。由于本教材分析了C语言和计算机的关系,所以可以自然地揭示出指针变量的本质。了解了本质后,引导读者分析了以指针变量的方式使用存储单元时与普通变量的不同。借助指针变量可以突破普通变量作用域的限制;不管是代码区的存储单元还是数据区的借助指针变量都可以在C语言中使用。

数组的概念在现行C语言教材中多定义为“符号常量”,这种说法的问题在于,无法解释对于数组变量a,它不仅可以用于取地址操作符(&a),而且&a的值与a的值相同(似乎为同一个地址)。数组变量的概念解释不清后,其与指针变量的关系就更说不清楚了。本教材中把数组变量看成一个“虚拟”的变量。它是变量,因为,它也标识了存储单元(sizeof(a)),它的元素的存储单元就是它的存储单元;它是虚拟的,因为,它的存储单元不能写入,它的值是规定的。当数组作为虚拟的变量后,读者自然可以分析出,&a的值与a的值虽然相同,表现为同一个地址,但地址是有类型的,它们的类型不同,也即代表了不同的存储单元。由此可知,数组变量是一种特殊的指针变量,所以,数组作形参时可以退化成一个普通的指针变量。

在此仅举几例。现行C语言教材中有太多的概念不准确,读者学起来自然就非常吃力,即使“学会的”也是一知半解,更别说让读者分析研究C语言了。

夸张地说,现行C语言教材的现状就是中国教育的缩影。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值