分享:C语言学习中的一些陷阱

2019-08-07 16:08发布

1、=和==的不同
在C语言中,符号==是作为赋值运算,符号==是作为比较的。一般而言,赋值运算比比较运算出现得更频繁,因此字符较少的符号=就被赋予了更常用的含义——赋值操作。赋值操作在平常更广泛被我们使用,这就导致了一个潜在的问题,程序员本意要做比较运算,却写成了赋值运算。


2、程序中的“/*”
当C编译器读入一个字符“/”之后又跟了一个字符“*”,那么编译器就必须做出判断:是将其作为两个分别的字符对待,还是合起来作为一个符号对待。不同的编译器对于“/*”会产生不同的影响。
例:要求写一个测试程序,无论是对允许嵌套注释的编译器,还是对不允许嵌套注释的编译器,该程序都能正常通过编译,但是这两种情况下程序执行的结果却不相同。
解:/*/*/0*/**/1这一行表达式,如果编译器允许嵌套注释的话,即可理解为:/*  /*  /0  */  *  */   1。两个/*和两个*/正好匹配,所以上式的值就是1.如果不允许嵌套注释的话,注释中的/*将被忽略。因此上面的表达式可以理解为:/*   /    */   0*  /*   */   1,他的值就是0*1。


3、字符和字符串
用单引号引起的一个字符实际上表示一个整数,例如‘a’的含义和0141(八进制)或者97(十进制)严格一致。
用双引号一起的是字符串,表示的是一个数组起始字符的指针,该数组末尾是以字符‘’结束的。
例:char *s=’/’是错误的。正确应该为char *s=”/”。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。