在C语言中,我们最常接触的除了字符与字符串外,就是符号了。一段程序里少不了“;、< >、{ }…”等等。那么,关于符号你又了解多少呢?
在我们平常使用的C语言符号中,最常见的有28个,包括“^,&, |,,/,%“等。如何用好这些符号,这才是值得深入学习的。
1.注释符号
我们都知道在C语言里,有两种注释方式:/* * /和//。一般来说,C语言的注释可以出现在C语言代码的任何地方。但是需要注意的是 / * * /不可以嵌套使用,/ * 总是匹配和它最近的 * /。
举几个比较常见的例子:
<1>int/* abcd */i;
这种注释是正确的。编译器会在编译的时候将注释剔除,原先注释的地方会变成一个空格。
<2>char *s=”abcdegh //abcdefg”;
这种注释也是正确的,双引号括起来的都是字符串常量,在这里双斜杠也是。
<3>y=x/*p
我们想实现的是x除以p指向的内存里的值,把结果赋值给y,但实际上编译器把/* 当作是一段注释的开始部分,所以在找* /,所以编译无法通过。可以改成y=x/(*p)
说了这么多,那么良好的注释习惯应该是怎么样的呢?
- 注释应该是准确无误的,也是通俗易懂的,不能存在二义性。
- 平时写代码的时候,一边写一边加注释。当代码发生改变时,相对应的注释也应该更新或者删除。
- 注释是对代码的提示,简单的说明,所以写注释时要简洁明了。一目了然地语句不要加注释。
- 如果写的函数比较多,对于全局变量这些数据必须加上注释,防止日后在看不知道变量的意义。
- 当代码较长,有较多的多重嵌套时,最好在一些代码块的结尾处加注释,便于阅读。
- 注释的缩进和代码的缩进是一致的,注释的位置应该是和代码相邻,可以和语句在同一行,也可以在语句的上一行,但不可以放在下方。同一结构不同代码块的注释应该是对齐的。
- 为了防止变量的误用,最好对变量的范围给出注释。
- -
2.接续符和转义符
在写宏的时候,我们可能会用到“\”表示续行符,也就是在这里说的接续符。在编译的时候,编译器会将反斜杠去掉,将反斜杠后面的东西自动接续到前一行,这就要求我们在写的时候绝对不能有空格。当然,反斜杠的下一行之前也不能有空格。如果加了空格,编译的时候就会报错。
反斜杠除了可以做续行符以外,也是转义字符的开始标识。在我们平常写代码中,常用的转义符有以下几种:
转义字符 | 意义 |
---|---|
\n | 回车跳行 |
\t | 横向跳到下一制表位置 |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\f | 走纸换页 |
\ | 反斜杠“\” |
\’ | 单引号符 |
\a | 鸣岭 |
\ddd | 1~3位八进制所代表的字符 |
\xhh | 1~2位十六进制所代表的字符 |
广义地将,C语言字符集中的任何一个字符都可以用转义字符来表示。ddd和hh分别为八进制和十六进制的ASCII代码,如\102可以表示字母“B”等。
3.单引号、双引号
在C语言中,单引号引起来的都是字符常量,而双引号引起来的都是字符串常量。即使这样解释,在我们应用的时候,还是很难分清。下面用一个表格来进行对比,加深对它们的区别:
不同的 1 | 代表的意义 | 在32位系统中占用的内存 |
---|---|---|
1 | 整型常数 | 4 byte |
‘1’ | 字符常量 | 1 byte |
“1” | 字符串常量 | 2 byte |
由于字符在内存里是以ASCAII码存储的,所以在字符常量可以和整型变量或变量进行运算,比如说‘A’+1。
4.逻辑运算符
在写语句时,我们需要对一些条件进行判断,也会经常使用逻辑运算符“&&”和“||”。在使用逻辑运算符时,一定要注意条件成立是全为真还是可真可假。
当我们从键盘连续接收字符输入时,给while循坏加一个判断条件,当输入为EOF或者回车的时候,输入停止。条件代码如下:
while((ch=getchar())!=EOF ? (tmp!=’\n’) )
在这里这个逻辑运算符应该用那个?“&&”表示的是,当接收的字符不是EOF时,需要判断是不是回车。“||”表示的是当字符不为EOF时,不用判断是否为回车。很明显,这里应该是“&&”。
&&:当第一个条件为真时,需要判断第二个条件是否成立。当第二个条件也为真时,条件满足,执行下一条语句。
|| :当第一个条件为真时,第二个条件不需要判断,直接执行下一条语句。
5.位运算符
C语言中的位运算包括下面几种:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
<1>左移和右移
“<<”的功能是把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
“>>“的功能是把 ”>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。但注意:对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0;而为负数时,符号位为1,最高位是补0 或是补1 取决于编译系统的规定。Turbo C 和很多系统规定为补1。
注意:左移和右移的位数不能大于数据的长度,小于0!
6.优先级问题
关于运算的优先级可以参照下面的图:
上面这些优先级没记住的不要紧,需要的时候可以查查表。但是,除了上面这些外,还有一些特别容易忽视的错误:
在平常学习中,一定要学会调试代码。一步步调试,发现问题所在尤为重要。很多符号问题都是因为我们自己对这些知识点似似而非,把握好细节,才能避免出现低级错误。