(本篇基于大一C语言助教对学生答疑的视角讲述。)
C课的C++化
包括写了class
的、用了引用的。请记住,本课主要内容是C语言,C++是下学期的课,今后大家做科研可以混着用,但是现在学习概念的时候一定要分清楚哪些特性是C,哪些是C++。
格式问题
说过了好多遍了,函数声明要写在函数外面、大括号右边不准写注释以外的东西。(补充注:请不要学习经典教材谭书的代码风格,会被项目经理打死的。)
动态分配的数组
有一个同学的交换函数里用的数组是动态分配的。
两个问题,首先,new/delete
以及new[]/delete[]
是C++的机制,在C里分配内存是malloc/free
,不要混用,混用必定出错。现在一律用malloc/free
。
更重要的是分配了一定要记得回收,那个同学在函数里malloc
了,但是既没有传给外面,又没有free
,这样函数结束之后malloc
出来的内存就无法访问了,但是仍然占着空间,于是可用内存就变少了。
swap函数
有些同学用了一个叫swap
的函数。然而他们的代码里没有这个函数的实现。这次用了这个函数的同学我都扣分了,因为你们完全没明白自己在用的是什么东西,这种态度要反省。
解释一下:这个swap
函数是C++的标准库<algorithm>
头文件里的,而实际上VS2008的C++标准库实现方式使得#include <iostream>
之后也能直接用它(std::swap
,或者using namespace std;
再swap
)。这个函数用到了C++的一种叫“引用”的特性,C里没有。先不要用。
逗号实现swap
请对着教材里的运算符章节,自己给自己讲一遍以下两种写法的区别
t = a, a = b, b = t;
t = a; a = b; b = t;
虽然执行效果相似,但第一个写法是用了“逗号运算符串接了三个赋值运算符”。如果不能理解这是什么,就老老实实地写第二种。
逗号运算符通常用于一些特殊情况下要在语法上的一个语句里完成几个运算。具体请重新看书。