C語言知識點(一)

2021-08-25 06:08:45 字數 3061 閱讀 7666

• 「型別」是對資料的抽象

• 型別相同的資料有相同的表示形式、儲存格式以及相關的操作

• 程式中使用的所有資料都必定屬於某一種資料型別

資料型別的本質思考

 思考資料型別和記憶體有關係嗎?

 c/c++為什麼會引入資料型別?

從編譯器的角度來考慮資料型別問題,才會發現它的本質。

• 資料型別可理解為建立變數的模具:是固定記憶體大小的別名。

• 資料型別的作用:編譯器預算物件(變數)分配的記憶體空間大小。

• 注意:資料型別只是模具,編譯器並沒有分配空間,只有根據型別(模具)建立變數(實物),編譯器才會分配空間。

#include 

int main(void)

執行結果:

執行結果:

#1.1.4 資料型別的別名

#include

struct people

;typedef

struct people

people_t;

/* 給結構體型別起別名 */

typedef

unsigned

int u32; //給unsigned int型別取別名

int main(void)

• void的字面意思是「無型別」,void 則為「無型別指標」,void 可以指向任何型別的資料。

• void修飾函式返回值和引數,僅表示無。

如果函式沒有返回值,那麼應該將其宣告為void型

如果函式沒有引數,應該宣告其引數為void

• void指標的意義

c語言規定只有相同型別的指標才可以相互賦值

void*指標作為左值用於「接收」任意型別的指標

void*指標作為右值賦值給其它指標時需要強制型別轉換

int *p1 = null; 

char *p2 = (char *)malloc(sizoeof(char)*20);

• 不存在void型別的變數

c語言沒有定義void究竟是多大記憶體的別名.

1、資料型別本質是固定記憶體大小的別名,是個模具,c語言規定:

通過資料型別定義變數。

2、資料型別大小計算(sizeof)

3、可以給已存在的資料型別起別名typedef

4、資料型別封裝概念(void 萬能型別)

1.2.1 變數的概念

概念:既能讀又能寫的記憶體物件,稱為變數;若一旦初始化後不能修改的物件則稱為常量。

變數定義形式: 型別 識別符號, 識別符號, … , 識別符號 ;

int     x;

int wordcut, radius, height;

double flighttime, mileage, speed;

int a;

double b;

1、程式通過變數來申請和命名記憶體空間 int a = 0。

2、通過變數名訪問記憶體空間。

變數:一段連續記憶體空間的別名.

3、修改變數有幾種方法?

答: 1)直接

2)間接

#include 

#include

int main(void)

4、資料型別和變數的關係

答:通過資料型別定義變數

流程說明

建立正確程式執行記憶體布局圖是學好c的關鍵

1.3.1 棧區和堆區

#include 

#include

#include

//堆char *getmem(int num)

return p1;

}//棧

//注意 return不是把記憶體塊 64個位元組,給return出來

//而是把記憶體塊的首位址(比如記憶體的編號0xaa11) ,返回給 tmp

// 理解指標的關鍵是記憶體,沒有記憶體**來的指標

char *getmem2()

void main(void)

strcpy(tmp, "111222"); //向tmp做指向的記憶體空間中copy資料

tmp = getmem2(); //tmp = 0xaa11;

return0;}

1.3.2 全域性區

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...