1. 头文件的作用之一:通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
  2. if 语句的零值比较:
    1. 布尔变量: 真:if (flag)      假:if(!flag)
    2. 浮点变量: 真:if ((x >= EPSINON) && (x <= EPSINON))  其中EPSINON是允许的误差。
  3. 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。

    for (i=0; i<N; i++)

    {

    if (condition)

    DoSomething();

    else

    DoOtherthing();

    }

    if (condition)

    {

    for (i=0; i<N; i++)

    DoSomething();

    }

    else

    {

    for (i=0; i<N; i++)

    DoOtherthing();

    }

    效率低但程序简洁                  效率高但程序不简洁

  4. 函数声明时如果没有参数,则要加上void。例如float GetValue(void);
  5. 如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函 数体内被意外修改。
  6. 用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
  7. 用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
  8. 字符数组a的容量是6个字符,其内容为hello\0。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。

    char a[] = “hello”;

    a[0] = ‘X’;

    cout << a << endl;

    char *p = “world”; // 注意p指向常量字符串

    p[0] = ‘X’; // 编译器不能发现该错误

    cout << p << endl;

  9. 指针参数是如何传递内存的。

    void GetMemory2(char **p, int num)

    {

    *p = (char *)malloc(sizeof(char) * num);

    }

    void Test2(void)

    {

    char *str = NULL;

    GetMemory2(&str, 100); // 注意参数是 &str,而不是str

    strcpy(str, "hello");

    cout<< str << endl;

    free(str);

    }

      公司重新分组了,我离开了我亲爱的Mentor波哥,投靠到新老大的门下。老大第一天就给我们推荐了两本C进阶读物。我用了一天时间把林锐大虾的这本《高质量C++编程摘要》的C语言部分扫了一遍,发现了很多以前没有注意到的细节,特摘以备忘。

    PS:一知半解最可怕,感谢林锐博士的这本实用的小书。他的《我的大学十年》写的也十分精彩。

《高质量C++/C编程指南》  ""本地友情提供下载

相关日志

  • 暂无相关日志

17fav 收藏本文

相关日志

  • 暂无相关日志

没有评论

(Required)
(Required, will not be published)