文档库 最新最全的文档下载
当前位置:文档库 › C语言学习中容易误解的几个问题

C语言学习中容易误解的几个问题

龙源期刊网 https://www.wendangku.net/doc/c4106029.html,

C语言学习中容易误解的几个问题

作者:于彦峰张新红

来源:《成才之路》2008年第11期

C语言是有经验的软件工程师设计的,它具有很强的功能,以及高度的灵活性。它和其他的结构化语言一样,能提供丰富的数据类型、广泛使用的指针以及—组很丰富的计算和数据处理使用的运算符。这门语言简洁并富有表达力。

一、 C语言词法问题

在学习当中对记号的意义的普遍的误解以及记号和组成它们的字符之间的关系。

1.= 不是 = =。C语言用=表示赋值而用==表示比较。这是因为赋值的频率要高于比较,因此为其分配更短的符号。此外,C还将赋值视为一个运算符,因此可以很容易地写出多重赋值(如a = b = c),并且可以将赋值嵌入到一个大的表达式中。这种便捷导致了一个潜在的问题:可能将需要比较的地方写成赋值。因此,下面的语句好像看起来是要检查x是否等于y:

if(x = y)foo ();

而实际上是将x设置为y的值并检查结果是否非零。当你确实需要先对一个变量进行赋值之后再检查变量是否非零时,为了在这种编译器中避免警告信息,应考虑显式给出比较符。换句话说,将上式改写为:if((x = y) != 0)foo ( );

这样可以清晰地表示你的意图。

2. & 和 | 不是 && 和 ||。容易将==错写为=是因为很多其他语言使用=表示比较运算。其他容易写错的运算符还有&和&&,以及|和||,这主要是因为C语言中的&和|运算符与其他语言中具有类似功能的运算符大为不同。

3. 多字符记号。一些C记号,如/、*和=只有一个字符。而其他一些C记号,如/*和==,以及标识符,具有多个字符。当C编译器遇到紧连在一起的/和*时,它必须能够决定是将这两个字符识别为两个分离的记号还是一个单独的记号。C语言参考手册说明了如何决定:“如果输入流到一个给定的字符串为止已经被识别为记号,则应该包含下一个字符以组成能够构成记号的最长的字符串。”因此,如果/是一个记号的第一个字符,并且/后面紧随了一个*,则这两个字符构成了注释的开始,不管其他上下文环境。

相关文档