总结几个C语言中的坑(二)
来源:互联网 发布:手机淘宝下载地址 编辑:程序博客网 时间:2024/05/17 09:31
近来又发现了几个C语言中的坑,现总结如下以备后续学习过程中查看回顾。
1、float变量与"零"值的比较
众所周知float型和double型都是有精度限制的,在计算机中用一个近似值来表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,因此使用 if(a == 0) 这样的语句往往会发生意想不到的错误,那么怎样才能比较精确的将浮点型变量与“零”值进行比较呢?这里给出了一种常用的方法。
#define EPSINON 0.000001 if ((a >= - EPSINON) && (a <= EPSINON)(ps:EPSINON是一个宏,它的值可以改成你想要的精度,通过这种方式也可以进行其他任何值的精度比较。)
(pps:由于浮点型变量的存储机制最好不要进行很大的浮点数与很小的浮点数之间进行运算,比如11111111111.000+0.00000000000001这个运算结果可能会很奇葩!)
2、strcpy函数运行机制的理解(来自华为面试题,程序本意是想实现字符串的复制)
void test(){ char str[10],str1[10]; int i; for (i = 0; i < 10; i++) { str1[i] = 'a' + i; } strcpy(str,str1);}这段代码第一眼看过去是没问题的,但是再看一眼就能够很轻松找到错误了,strcpy函数是拷贝字符串的函数,它是以'\0'为结尾的,因此当程序运行strcpy这一行时会发生内存非法访问导致程序崩溃。
3、代码不规范所带来的意想不到的错误
<span style="font-size:18px;">y = x/*p;</span>代码的原意为x除以p所指向的内存中的值再将其赋给y,结果。。。。/*看着好奇怪。。。。那不是注释吗????天哪!!!!因此你可以将它写成y = x / *p;或者y = x / (*p);
0 0
- 总结几个C语言中的坑(二)
- 总结几个C语言中的“坑”(一)
- C语言中的几个容易混淆的知识点总结
- C语言中的几个容易混淆的知识点总结
- 总结几个 C 语言知识点
- c语言中的几个关键字
- C语言几个容易混淆概念总结
- C语言中的几个编译指令
- c语言中的几个小技巧
- 几个C语言中的易混淆点
- 重写c语言中的几个字符串函数
- 第一节 C语言编程中的几个基本概念
- C语言中的几个易错点-课堂笔记
- C语言要点总结(二)...
- C语言要点总结(二)...
- C语言规则总结二
- c语言总结(二)
- C语言中的static总结
- 继承、组合
- tomcat做文件服务器
- 2、Django中模板的使用
- RBD和AOF持久化对比
- 机器学习--高斯判别分析
- 总结几个C语言中的坑(二)
- @""
- 内存对其
- socket 通信关于bind那点事
- Java加密技术(一)单向加密算法MD5&SHA&MAC与BASE64
- 监听 editText状态
- Android 组件ContentProvider
- Hibernate+Spring配置
- 库项目的添加过程