程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C 專家編程 筆記(一、二章)

C 專家編程 筆記(一、二章)

編輯:關於C
1.編輯器設計者的金科玉律:效率(幾乎)就是一切 2.閱讀ANSIC標准 , 尋找樂趣和裨益 具體的ANSI C標准的規定我都不說了,從中看出 char * 類型是可以作為參數專遞的,但是char** 是不行的,所以我們 傳遞多維數組的時候要表明確前n-1維的下標 3.容易混亂的const [cpp]  int main(int argc, char* argv[])   {          //定義基本類型的const變量,const 位置在哪兒都可以       const int x = 2,y = 3;  //兩個常量          //定義一個非const變量       int z = 3;     //一個普通變量          //定義一個指向常的指針       const int* pc = &x;   //指向常量的指針          //定義一個常指針       int* const cp = &z;   //常指針              //定義一個非const指針       int* pp = &z;    //int 型指針          pc = &z; //可以,pc是一個指向常量的指針,不能通過該指針去修改指針所指向的內存空間的值,但是,該指針可以指向別的變量          // *pc = 10; //不可以,*pc所指向的地址為const變量,其值不可更改 pc是一個指向常量的指針,不能通過該指針去修改指針所指向的內存空間的值          pc = pp; //可以,pc為指針,其值可被改變 pc是一個指向常量的指針,pp是一個普通指針,用一個普通指針給一個指向常量的指針賦值是可以的       // pp = pc; //用一個指向常量的指針,賦值給一個普通指針,不可以。如果可以,那麼就可以通過普通的指針去修改內存的值          *cp = x; //可以,通過常指針去修改指針所指向變量的值是可以的          // cp = &x; //不可以,cp為常指針,指針的值不能被修改,給常指針賦值是錯誤的          // pp = &x; //不可以,pp是非const指針,原則上來講給它賦值是可以的,在不同的編譯器下有不同的結果       // pp = pc; //不可以,指向常量的指針不能賦值給一個普通的指針       pp = cp; //可以,常指針可以賦值給一個普通指針          const int * const pp = &a; //雙const 既保護指針又保護內存變量          return 0;   }     4.ASINC 手冊重新編寫了有關內容整型升級和尋常算數轉換   注意:  #define  TOTAL_ELEMENTS       ( int )( sizeof(array)  /  sizeof(array[0]) )  必須加上(int)強制轉換,不然運算的結果是個  unsigned int  類型,在程序中與有符號數運算時會發生意想不到結果   5. 錯誤斷言 無論什麼時候遇見  malloc(strlen(str))   都是錯誤的 而 malloc(strlen(str) + 1) 是正確的 因為字符串處理包含了一個額外的空間,用於容納字符串結尾的‘\0’ 6. 一個‘L’的NUL  和  兩個 ‘L’的NULL   7. switch 中case  後面不用break   97%都是錯誤的,而且default這單詞如果寫錯的話,編譯器是不檢測的。 8. 在字符串數組在初始化的時候,如果不小心漏掉了一個逗號,編譯器不會發出錯誤信息,而是悄無聲息地把兩個字符串合起來 [cpp]   #include<stdio.h>   #include<string.h>      #define  TOTAL_ELEMENTS    (int)(sizeof(str)/sizeof(str[0]))      int main()   {       char *str[] = {           "aaa",           "bbb",           "ccc",           "ddd"           "eee",       };       printf("the length of the array is %d\n",TOTAL_ELEMENTS);       for(int i = 0; i < TOTAL_ELEMENTS; i++)           puts(str[i]);       return 1;   }   結果:   9. 使一段代碼第一次執行的行為與以後執行時間不同(函數中申請靜態變量)   10. i = 1, 2; 的結果是i 為多少呢? 賦值運算符的優先級高於逗號,所以 實際情況為:  (i  = 1), 2 , 所以i 最終的值為1 而 i = (1 ,2);的結果i 為2;   11.計算的次序    
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved