• 尽量不要用浮点数差值来做判断(分支、循环等),因为浮点数的精度会导致各种问题 ```c double x = 3; double y = x (1 / 3); /*
    • 1 / 3是0.3333333
    • 3 0.333333就不一定是1 /

    if(y - 1 > 0.00001) { // some statements
    }

    1. - 如果真的要比较浮点数,建议使用fabsfabsf两个绝对值函数,避免两个值先后顺序写错,同时将精度确定好
    2. ```c
    3. int abs(int i); //处理int类型的取绝对值,stdlib.h
    4. double fabs(double i); //处理double类型的取绝对值, math.h
    5. float fabsf(float i); //处理float类型的取绝对值,math.h
    • 没有必要别使用goto,虽然goto在跳出多重循环有特效,但是仅限于此,如果随意使用goto会使程序逻辑混乱,人难看懂代码
    • c语言没有引用,c++才有引用,本质都是指针
    • 无名结构体、联合体 ```c struct { int a;
      }test;

    union { int b; char c[100]; }make;

    // 可以直接使用test和make,但是不能声明别的变量

    1. - [结构体位域](https://blog.csdn.net/xiaominthere/article/details/27377021)
    2. ```c
    3. struct _test{
    4. int a: 8;
    5. }
    • c中printf的format格式含义

      1. %A 浮点数、bai十六进du制数字和p-记法(C99
      2. %c 一个字符
      3. %d 有符号十进制整数
      4. %e 浮点数、e-记数法
      5. %E 浮点数、E-记数法
      6. %f 浮点数、十进制记数法
      7. %g 根据数值不同自动选择%f或%e
      8. %G 根据数值不同自动选择%f或%e.
      9. %i 有符号十进制数(与%d相同)
      10. %o 无符号八进制整数
      11. %p 指针
      12. %s 字符串
      13. %u 无符号十进制整数
      14. %x 使用十六进制数字0f的无符号十六进制整数
      15. %X 使用十六进制数字0f的无符号十六进制整数
      16. %% 打印一个百分号 使用printf ()函数 printf()的基本形式: printf("格式控制字符串",变量列表);
    • strncpy和memcpy的区别

    • Linux 怎么获取某个字节数据

    • 对于置空但不指向NULL的字符串,如果需要判断是否为空串有一下两种常用方式 ```c char *str; char s[20];

    / 正确方式:/ // 一:直接使用string.h内部库函数strcmp(str, “”) if(strcmp(str, “”) == 0)

    // 二:使用str种第一个字符进行判空 if(str[0])

    / 错误方式:/ // 一:直接将字符串放到if内判断 if(str)

    // 二:没有考虑空格

    1. - 进一步抛出问题:strstr[0]的地址相同,但是用于判断时为何str为真,str[0]为假?
    2. - 注意不要将两个无符号数相减作为判断表达式
    3. ```c
    4. unsigned int a, b; // size_t也是无符号数
    5. if(a - b > 0) { // 永远为真
    6. } else {
    7. }
    8. /*
    9. * a = 11, b = 23
    10. * a - b == 4294967284
    11. */
    12. // 从此引出strlen的加减作为判断表达式是不合理的,因为strlen返回值类型是size_t
    13. /*
    14. * 相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。
    15. * 同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,
    16. * 所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,
    17. * 因此 sizeof 不能用来返回动态分配的内存空间的大小。
    18. */