总结几个C语言中的坑(二)

        近来又发现了几个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);

转载于:https://www.cnblogs.com/jungzhang/p/5547347.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值