• 「型別」是對資料的抽象
• 型別相同的資料有相同的表示形式、儲存格式以及相關的操作
• 程式中使用的所有資料都必定屬於某一種資料型別
資料型別的本質思考
思考資料型別和記憶體有關係嗎?
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...