C语言学习之符号篇

 

/*===================================
*
* 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;
 
 总结,实际上关于运算符,在我们实际编程中,多加括号()就不会引起误会了,哈哈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值