c語言是linux程式設計的基礎,這裡把c語言的知識複習一下,對於c語言基礎知識不再提及,主要寫一些容易出錯的東西。
一級指標與一維陣列,將陣列名賦值給指標後,操作指標就是運算元組。
二級指標與二維陣列,二維陣列不能直接賦值給二級指標,因為二者指向的資料不同。二維陣列名指向的是一維陣列的位址。
陣列指標,指向陣列變數的指標,格式:《資料型別》 (*《指標變數名》)[《大小》];範例:
int (*p)[10];
代表指向乙個包含10個整型元素的陣列指標。
指標陣列,陣列中的元素為指標變數。格式: 《資料型別》 *《指標變數名》[《大小》];範例:
int *p[10];
代表包含10個元素的陣列,陣列中的元素為指向整形變數的指標。
函式指標,表示指向函式的指標,格式《資料型別》 (*《函式指標名稱》)(《引數說明列表》);範例:
int (*p)(int a,int b);
int check(int a,int b);
p = check;
表示乙個指向函式的指標。這裡注意的是,指標指向的函式必須與函式指標定義的返回值和引數型別一致
重定義函式指標,由於函式指標比較複雜,我們利用typedef重定義,這樣用起來會更加簡便,格式如下:
typedef int(*func)(int a, int b);
//func作為乙個函式指標的型別
int check (int a,int b)
func func1 = check;
指標函式,表示返回值為指標的函式,格式《資料型別》 目標函式的返回值型別,範例:
int *add(int a, int b);
表示該函式的返回值是整型指標
const與指標結合的幾種情況:
(1)常量化指標的物件
格式:const 《資料型別》 *《指標變數名稱》;
範例:
const int *p
int const *p
int a =1;
p = &a;
指標指向的變數a的值是不允許改變的。此時修改a = 2;會報錯。
(2)常量化指標變數
格式:《資料型別》 *const 《指標變數名稱》= 《指標運算表示式》;
int *const p;
int a = 1;
p = &a;
指標指向的位址是不能改變的,此時修改p =&b會報錯
(3)常量化指標及其物件
格式:const 《資料型別》 * const 《指標變數名》 = 《指標運算表示式》 ;
範例:
const int *const p;
int a =1;
p = &a;
此時,指標指向的位址和位址內的變數都不可以改變。
void
void型的指標變數是一種指向不確定資料型別的指標變數。它可以通過強制型別轉換讓該變數指向任何資料型別的物件。
一般形式為:
void *《指標變數名》 ;
1.棧:由程式自動分配和釋放,呼叫函式時開闢空間,函式呼叫結束後釋放空間
2.堆區:有程式設計師分配和釋放的。malloc,free
如果沒有自動釋放,可能會作業系統**
3.全域性區/靜態區(在全域性設定的變數或在區域性靜態變數)
初始化區 static int a =0;
未初始化區 static int a ;
若沒有初始化,預設值為0
4.常量區
唯讀,不可寫
char p="hello" 這個的hello在棧
char *p = "hello"這個hello在常量區,然後由指標指向它
5.程式**區
存放二進位制**
C語言複習(專公升本複習)
示例 inculdevoid mian 上面是乙個簡單的c語言程式下面就來介紹其中的各個關鍵點 c語言程式是由乙個或者多個函式構成,乙個c語言有若干條c語言語句構成 2.注 乙個c語言程式或是乙個資料夾中只能有乙個主函式 inculdevoid mian 1.inculde 標頭檔案 inculde...
c語言複習
記住,typedef是定義了一種型別的新別名,不同於巨集,它不是簡單的字串替換。比如 先定義 typedef char pstr 然後 int mystrcmp const pstr,const pstr const pstr實際上相當於const char 嗎?不是的,它實際上相當於char co...
C語言複習
巨集 替代 的意思 巨集定義 後面沒有標點。替換原則 先替換,後計算 define a x x x int b a 10 10 b 10 10 10 10 120 而非 10 10 10 10 條件編譯 能夠 減少 系統編譯的 量 是一種預處理命令。static int a 10 表示a 靜態變數,...