你不知道的符号问题

在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鸣岭
\ddd1~3位八进制所代表的字符
\xhh1~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.优先级问题
关于运算的优先级可以参照下面的图:
这里写图片描述
这里写图片描述
这里写图片描述

上面这些优先级没记住的不要紧,需要的时候可以查查表。但是,除了上面这些外,还有一些特别容易忽视的错误:

这里写图片描述

在平常学习中,一定要学会调试代码。一步步调试,发现问题所在尤为重要。很多符号问题都是因为我们自己对这些知识点似似而非,把握好细节,才能避免出现低级错误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值