閱讀C語言教材的一些收穫

weixin_33751566發表於2016-05-31
  • 如果一個函式需要改變外部一個字串的內容(一般通過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 *)

相關文章