C语言学习的一些陷阱 点击:251 | 回复:0



玻璃的心

    
  • 精华:30帖
  • 求助:2帖
  • 帖子:984帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2013-07-07 21:06:34
楼主

 1、=和==的不同
在C语言中,符号==是作为赋值运算,符号==是作为比较的。一般而言,赋值运算比比较运算出现得更频繁,因此字符较少的符号=就被赋予了更常用的含义——赋值操作。赋值操作在平常更广泛被我们使用,这就导致了一个潜在的问题,程序员本意要做比较运算,却写成了赋值运算。
 
 
2、程序中的“/*”
当C编译器读入一个字符“/”之后又跟了一个字符“*”,那么编译器就必须做出判断:是将其作为两个分别的字符对待,还是合起来作为一个符号对待。不同的编译器对于“/*”会产生不同的影响。
例:要求写一个测试程序,无论是对允许嵌套注释的编译器,还是对不允许嵌套注释的编译器,该程序都能正常通过编译,但是这两种情况下程序执行的结果却不相同。
解:/*/*/0*/**/1这一行表达式,如果编译器允许嵌套注释的话,即可理解为:/*  /*  /0  */  *  */   1。两个/*和两个*/正好匹配,所以上式的值就是1.如果不允许嵌套注释的话,注释中的/*将被忽略。因此上面的表达式可以理解为:/*   /    */   0*  /*   */   1,他的值就是0*1。
 
 
3、字符和字符串
用单引号引起的一个字符实际上表示一个整数,例如‘a’的含义和0141(八进制)或者97(十进制)严格一致。
用双引号一起的是字符串,表示的是一个数组起始字符的指针,该数组末尾是以字符‘\0’结束的。
例:char *s=’/’是错误的。正确应该为char *s=”/”。



热门招聘
相关主题

官方公众号

智造工程师