C語言知識點 3

2021-07-24 00:24:52 字數 1156 閱讀 2675

1.指標與陣列:用陣列指標遍歷陣列每個元素,指標當作陣列來用,int ages[5];int *p;p=ages;*p==ages[0]==p[0],*(p+2)==ages[2]==p[2],指標變數的p+1究竟加多少,取決於指標的型別,另外指標指向的是陣列的首元素,並不是指向陣列,這也和指標型別有關,指標是int型別,只能指向乙個整數,而不是指向乙個整型陣列 

2.字串可以用字元陣列表示,也可以用指標表示,但是char name[ ]="it";是字串變數,放在記憶體的棧,可以隨便修改,棧存放區域性變數;而char *name2="it";是字串常量,值是不能修改的,char *name3="it",name2和name3的位址是一樣的,都放在記憶體的常量區作為快取,不會開闢新的儲存空間。如果字串的內容需要經常修改,就用陣列定義,如果字串的內容不需要修改,而且這個字串經常使用,就用指標定義。同理,定義字串陣列也有兩種方式,即二維字元陣列和指標陣列,陣列名就是位址15.定義指向函式的指標,(*p)必須括起來,int (*p)(int a,int b);函式名就是函式的位址

3.區域性變數必須初始化,全域性變數可以不初始化,但預設初始值是0

4.結構體:只能在定義結構體的同時,給它一次性賦值。指向結構體的指標,結構體獨有的,(*p).age=25或 p-> age ,

5.寫帶引數的巨集定義,每個引數要加小括號,結果也要用小括號括起來

6.檔案包含,使用條件定義ifndef lisi_h和巨集定義 #define lisi_h 書寫自己的標頭檔案 

7.typedef給已經存在的型別定義乙個新型別,但是定義乙個指向函式的新的型別,新的型別名稱寫到*後面的指標型別p的位置 

8.預設情況下,所有的全域性變數都是外部變數,所有的函式都是外部函式。extern 完整的定義和宣告乙個外部函式,或宣告乙個全域性外部變數(如果int a;在後面,就在前宣告,當然extern可以省略),可以省略;static 定義和宣告乙個內部函式,或定義乙個全域性內部變數。預設情況下所有函式都是外部函式,不允許有同名的外部函式,但允許不同檔案中有同名的內部函式。static定義乙個區域性變數,可以延長區域性變數的生命週期,下一次呼叫此函式,不會再次分配記憶體,可以下一次被本函式共享,使用於,呼叫頻率很高,且變數值固定不變的函式 

9.遞迴,就是找規律,這個結果與前乙個結果之間的關係。遞迴的2個條件:函式自己呼叫自己,必須有乙個明確的返回值,即n的0次方為0,否則就會無限呼叫下去

c語言 知識點

遞迴方法 遞迴相比迴圈時間上快些,但是 遞迴比較占用空間,如果遞迴的次數超過十萬次後會導致資源占用完畢 標準的 優化技巧 消除迴圈 函式迴圈 函式 就地擴充套件 公共子表示式消除 改進暫存器分配 省略執行時對陣列邊界的檢查 迴圈不變數 移動 操作符長度消減 把指數操作符轉變為乘法操作 把乘法操作變為...

c語言知識點

2019 3 4 typedef void voidp 等同於typedef void voidp voidp a a null 即定義了乙個可以指向任何型別的指標 typedef voidpf zallback open file func of voidpf opeaque,const char...

c語言知識點

關於 va args define debug level,format,if level g printlevel else 這裡的 va args 表示可變引數,即上面.傳遞進來的多個引數,是當傳入引數為0時,去掉前面,防止編譯出錯 的另乙個用法如 define xname n x n,那xna...