• C专家编程(1)


    这一系列主要记录阅读《C专家编程》中,需要注意的一些内容。

    寻常算术转换(P22-24)

    P23:当执行算数运算时,操作数的类型如果不同,就会发生转换。数据类型一般朝着浮点精度更高、长度更长的方向转换,整型数如果转换为signed不会丢失信息,就转换为signed,否则转换为unsigned。

    #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
    
    int d=-1;
    if (d <  TOTAL_ELEMENTS -2)
        xxx;  // 实际执行不到 
    

    sizeof()返回类型为无符号数,比较时d被升级为unsigned int类型。

    解决方法是对TOTAL_ELEMENTS强制类型转换为int,即

    if (d <  (int)TOTAL_ELEMENTS -2)
    

    符号“重载”(P37-38)

    许多操作符在不同的场景下会有不同的意义,如staticvoid*等。

    另外,还有一些符号具有多个容易混淆的意思。

    p = N * sizeof * q;  // (1)
    apple = sizeof(int) * p;  // (2)
    

    (1)中,第一个*表示乘法,而第二个*表示指针,sizeof操作符把q指向的内容作为操作数,返回该对象的类型的字节数(sizeof的操作数是变量时可以不加括号)。

    (2)中,表示把int的长度乘以p,而不是把未知类型的指针p强制转换成int,然后进行sizeof操作。

    欢迎访问我的个人站点:https://www.maxiaowei.tech
  • 相关阅读:
    (二)服务器性能剖析
    (一) MySQL架构
    HBase学习笔记一
    Hadoop系列读书笔记
    Java基础小结
    Redis学习笔记一
    Hive学习笔记一
    使用redis-benchmark测试redis性能
    关闭Stackexchange.Redis的未用到的pub/sub连接
    redis报错:EXCEPTION_ACCESS_VIOLATION
  • 原文地址:https://www.cnblogs.com/maxiaowei0216/p/14247474.html
Copyright © 2020-2023  润新知