您的位置:首页 > 编程语言 > C语言/C++

C语言学习之符号篇

2012-05-19 21:14 148 查看
/*===================================

*

* C语言学习之符号篇

*

* xue,2012、05、19 20:05

*

*===================================

1、注释符号:

a、/*总是与离它最近的*/匹配。

b、我们来看一下以下的例子,看一下哪些是正确的,哪些是错误的.

(A)、int/*...*/i;

(B)、char *s = "abcd //efg";

(C)、//IS it a \

valid comment?

(D)、in /*...*/t i;

上述例子中,A、B、C是正确的,只有D是不正确的,实际上,编译器会把注释剔除,但是不是简单的剔除,而是用空格来代替原来的注释。因此,我们就很容易看出A、B、C是合法的,D是非法的。

2、y = x/*p

实际上,编译器会把/*当成是注释的开始,把/*后面的内容当成是注释,直到出现*/为止。如果把y = x/*p改成 y=x/ *p 或 y = x/(*p),这样的话,表达式的意思就是x除以p指向的内存的值了,也就是说当/和*之间没有空格,都会被当做是注释的开始。

3、下面我们再来看一个例子

0x01 << 2 + 3;

大家来看一下它的结果是多少,是7吗?我们来测试一下:

它的结果是32;因为“+”号的优先级比移位运算符的优先级要高,所以结果就是32了

4、一些容易出错的优先级问题

a、.的优先级高于*,例 *p.f 常被误认为(*p).f,其实它是*(p.f)

b、==和!=高于位操作,例 (val & mask != 0),常被误认为(val & mask) != 0,其实它是val & (mask != 0),

c、==和!=高于赋值符,例c = getchar() != EOF,常被误认为(c =getchar()) !=EOF,实际上它是c = (getchar() ! = EOF) 

d、算数运算符高于移位运算符,例 msb << 4 +lsb,常被误认为(msb << 4) + lsb,实际上它是msb << (4 + lsb),

e、符号运算符在所有的运算符中优先级最低,例i = 1,2;常被误认为是i = (1, 2),其实它是 (i = 1), 2;

总结,实际上关于运算符,在我们实际编程中,多加括号()就不会引起误会了,哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: