C中遇到的一些问题总结

  此篇随笔总结一下各种情况下关于C语言的问题。

 

  1.atoi函数只能处理C风格的字符串

    atoi函数接收一个const char*的参数返回一个int。atoi函数只能处理结尾为/0的C风格字符串,如果输入为一个普通char的引用,会产生运行时错误,内存溢出,访问越界了。因此使用auto for遍历string时也不能在循环中不加处理的使用atoi函数。

string s;
for(auto c:s)
{
    int i=atoi(c);            //内存泄漏,atoi函数会越界访问
}

char c=1int i=atoi(&c);           //内存泄漏

 

  2.C++编译器会对长的整形算数式进行拆分优化(不包括浮点运算float,double)

x=a+b+c;
y=b+c+d;
//编译器可能会优化为下式来减少一个加法操作
t=b+c;
x=a+t;
y=t+d;

  这么做是因为整形字符满足结合律,而浮点运算不满足结合律。

x=a+b+c;
a+b=NaN;
NaN+c=NaN
则 x=NaN;
若结合律会导致错误
b+c!=NaN并且a!=NaN;
则 x!=NaN       //结果错误

 

posted @ 2021-09-10 21:41  放不下的小女孩  阅读(237)  评论(0)    收藏  举报