zoukankan      html  css  js  c++  java
  • C专家编程

    C专家编程

    1、如果写了这样一条语句: if(3=i)。那么编程器会发出“attempted assignment to literal(试图向常数赋值)”的错误信息。

      所以将常量放置在==前央,可以避免写成赋值语句。

    2、空格会对扩展的结果造成很大的影响。

      #define a(y) a_expanded(y)
    
      a(x)
    
      会被扩展为:a_expanded(x)
      而#define a (y) a_expanded (y)
    
      a(x)
    
      会被扩展为:
    
      (y) a_expanded (y)(x)

    3、函数声明中可以省略形参名,如:

      char *strcpy(char *, const char *);

      但不建议省略,国灰形参名起到了一个注释的作用。

      char *strcpy(char *dst,const char* src)。

    4、以下代码是合法的。

      char *cp;

      const char *ccp;

      ccp = cp;

      cp指向一个char,ccp指向一个const char,两个指针指向类型相同,只是限定符不同。

      但以下代码是非法的。

      char **cp;

      const char **ccp;

      ccp = cp。

      因为上述中,cp是指向char*的指针,而ccp是指向const char *的指针。两个指针指向的类型不同。

    5、在一个符号前加上const限定符只是表示这个符号不以被赋值。也就是它的值对于这个符号来说是只读的。

    6、malloc(strlen(str))几乎可以断定它是错误的,而malloc(strlen(str)+1)才是正确的。因为字符串末尾有一个''。

    7、一串相邻的字符串,在编译时会被自动合并 。

      print("Hello"

      "World")。

    8、缺省情况下,函数的名字是全局可见的。

       extern function pear() // 在任何地方均 可见

       static function turnip() // 在这个文件之外不可见

    9、[]和()的优先级高于*。

      int *ap[] // ap是个元素为int指针的数组

      int *fp() // fp是个函数,返回int*

    10、下述代码。当用户的输入超过了512个字符时,gets()函数会继续把多出来的字符压到堆栈中。

    main(argc, argv)
    {
        char line[512];
        gets(line)
    }

       应该用fgets替换gets。

      fgets(line, sizeof(line), stdin)

    11、下述代码中,buffer是一个自动分配内存的数组,是该函数的局部变量。return之后,buffer的栈空间被回收,导致指针无效。

    char * func()
    {
         char buffer[200];
         return buffer;    
    }

     12、优化级。

      1)括号括起来的部分。

      2)后缀操作符,如()、[]。

      3)前缀操作符,如*。

    13、chalk是一个指向int的指针,chese则是一个int。

      int *chalk,cheese;

  • 相关阅读:
    python字符串,列表,字典的常用方法
    Python【第一课】 Python简介和基础
    python中index()与find()的差异
    tomcat学习笔记2
    tomcat学习笔记1
    haproxy学习笔记
    高可用工具keepalived学习笔记
    ngx_http_upstream_module模块学习笔记
    nginx的rewrite,gzip,反向代理学习笔记
    nginx学习笔记1
  • 原文地址:https://www.cnblogs.com/tekkaman/p/7858336.html
Copyright © 2011-2022 走看看