c语言编程基础:数据类型与运算符的易错点总结

admin C语言 4


你是不是也遇到过这种情况?写的 C 语言代码看起来没问题,编译也能通过,但运行结果就是不对。查来查去,最后发现居然是数据类型选错了,或者运算符用错了。其实啊,C 语言的基础虽然看着简单,但数据类型和运算符里藏着不少坑,今天兔子哥就把这些易错点总结一下,新手看完能少走很多弯路,一起往下看吧!

数据类型里的那些 “小陷阱”


首先说数据类型,别看就那几种,用错了麻烦可不小。
最常见的就是整数类型选错。比如想用 int 存一个很大的数,结果超过了 int 的范围,程序就会出问题。有个网友分享说,他算 10 的阶乘,用 int 类型结果是负数,后来换成 long long 就对了。这是因为 int 通常只能存到 20 多亿,超过这个数就会 “溢出”,变成负数或者乱码。所以啊,存大数的时候,别嫌麻烦,用 long long 更保险。
然后是 float 和 double 的精度问题。有人觉得这俩差不多,随便用。其实不然,float 精度低,只能存 6-7 位有效数字,double 能存 15-17 位。比如你算 0.1+0.2,用 float 可能得到 0.3000001,用 double 就更接近 0.3。要是做财务相关的程序,精度不够可就麻烦了。
还有字符类型 char,很多人不知道它默认可能是有符号的。这意味着 char 的范围是 - 128 到 127,要是你存一个 200 进去,就会变成负数。解决办法也简单,定义的时候写成 unsigned char,范围就变成 0 到 255 了,适合存 ASCII 码以外的数值。
有人会问,那怎么知道每种类型的范围呢?其实 C 语言有个头文件叫 limits.h,里面定义了各种类型的最大值最小值,比如 INT_MAX 是 int 的最大值, include 之后打印出来看看,心里就有数了。

运算符使用时的 “坑”


运算符看着简单,但用错的人真不少,尤其是新手。
最容易搞混的就是赋值运算符 = 和等于运算符 ==。比如 if (a=5) 这种写法,编译不会报错,但意思完全变了,变成了把 5 赋给 a,然后判断 a 是否非零,结果永远是真。正确的应该是 if (a==5)。兔子哥当年写代码,这个错犯过不止一次,调试半天才发现。
自增自减运算符 ++ 和 -- 也容易出问题。比如 int a=3; int b=a++; 这里 b 的值是 3,a 变成 4;要是 b=++a,那 b 就是 4,a 也是 4。很多人搞不清前后缀的区别,写循环的时候经常算错次数。有个小技巧,记住 “先加后用还是先用后加”,前缀就是先加后用,后缀就是先用后加。
还有整数除法的问题。比如 5/2,结果是 2 而不是 2.5,因为两个 int 相除,结果还是 int,小数部分会被丢掉。要是想得到小数,得把其中一个数改成浮点数,比如 5.0/2 或者 5/(float) 2。这个坑,很多人在算平均分、比例的时候都会踩。
逻辑运算符 && 和 || 有个 “短路” 特性,也得注意。比如 a&&b,如果 a 是假,就不会再算 b 了;a||b,如果 a 是真,就不算 b 了。要是 b 里有改变变量值的操作,结果可能就不是你想要的。比如 int a=0, b=0; if (a++ && b++),最后 a 是 1,b 还是 0,因为 a++ 之后是 0,后面的 b++ 就没执行。
运算符易错点正确用法
= 和 ==把赋值当等于if (a==5) 判相等,a=5 是赋值
++/-- 前后缀搞混执行顺序前缀:先加后用;后缀:先用后加
/ 整数除法期望小数结果至少一个操作数用浮点数,如 5.0/2
&&/短路忽略后续操作避免在逻辑运算里放改变变量的操作

类型转换的 “隐形坑”


隐式类型转换也经常让人头疼。比如 int a=1000; char b=a; 这时候 b 的值可能不是 1000,因为 char 存不下,会发生截断。这种转换编译器不会报错,但结果会出错,很难查。
还有不同类型运算时的转换,比如 int 和 float 相加,会先把 int 转换成 float 再算。但要是 int 和 unsigned int 运算,结果会变成 unsigned int,这时候负数就会出问题。比如 int a=-1; unsigned int b=1; if (a < b) 其实是假的,因为 a 会被转成很大的正数。
怎么避免这些问题呢?兔子哥的建议是,尽量用相同类型的变量运算,不同类型转换时最好用强制转换,比如 (int) 3.14,这样代码看起来也清楚,别人一看就知道这里有转换。
其实啊,这些易错点都不算难,关键是刚开始学的时候就要注意。多写代码,多调试,遇到结果不对的时候,先想想是不是数据类型选错了,或者运算符用错了。有个网友说,他把所有易错点抄在小本子上,写代码的时候翻一翻,慢慢就养成习惯了,很少再犯。
兔子哥觉得,基础扎实比啥都重要,数据类型和运算符就是 C 语言的基石,这块搞明白了,后面学循环、函数就顺多了。别怕犯错,错了就记下来,下次别再犯,慢慢就熟练了。希望这些总结能帮到你,写代码的时候多留意,肯定能少走弯路。

标签: 差不多 不知道

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~