阅读C语言教材的一些收获

  • 如果一个函数需要改变外部一个字符串的内容(一般通过char 指针实现),那么参数的类型应该为char **.如果能通过int 指针来改变外部的int一样,想改变外部的字符串(即为char ),必须用char *,否则函数pass by value后,内部的指针改变不会影响到实参指针的改变。

  • gets函数可以接受带空格的字符串

  • free某个指针后,该指针是可以使用的(地址有效),但*p不可以.

  • 链表的排序对链表node的交换有两种方法,一种是交换node的data field,不改变node的指向关系。另一种是改变node的连接实现node的交换,操作较为复杂.

  • 在complicated declaration中,对于任何指针,想描述它的类型,就一定要把它和星号一起括起来,如int (fpa[2])(int)*

  • 将函数先声明再实现,函数名事实上是一个指针!!!因此可以将函数名赋值给函数指针数组的某一位

  • 函数指针p,可以用p()调用函数,也可以(p)()*调用函数,本质上是一样的(可能存在隐式类型转换).函数名的值就是一个地址而已。对函数名或者函数指针解引用得到的还是原来的地址值,没有任何改变。

  • 字符输出输出函数(准确的说是宏):

    • 输入:

      • fgetc(FILE *): 从文件中读一个字符
      • fgetchar(): 从标准输入设备中读一个字符(用fgetc实现)
      • getc(FILE *): may be implemented as a macro
      • getchar(): getc(stdin)实现
    • 输出:

      • fputc(int, FILE *)向文件中写一个字符
      • fputchar(int): 向标准输出设备中写一个字符(用fputc实现)
      • putc(int, FILE *): may be implemented as a macro
      • putchar(int): putc((c), stdout)实现
  • 基于字符串的文件读写:

    • 字符串输入:

      • char _gets(char *s)
      • char _fgets(char *s, int n, FILE *stream)
    • 字符串输出:

      • int puts(const char *)
      • int fputs(const char *, FILE *)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容