類型是對數據的抽象,類型相同的數據在內存中有同樣的存儲格式、表現形式。在一段程序中,所用到的數據一定屬於某一個類型。
數據類型可以理解成創建變量的模具,是固定大小內存的別名。
數據類型的作用:編譯器預算對象分配內存空間大小。
例如:求數據類型的大小。
位:」位(bit)」是電子計算機中最小的數據單位。每一位的狀態只能是0或1。
字節:8個二進位位構成1個」字節(Byte)」,它是存儲空間的基本計量單位。1個字節可以儲存1個英文字母或者半個漢字,換句話說,1個漢字佔據2個字節的存儲空間。
字:」字」由若干個字節構成,字的位數叫做字長,不同檔次的機器有不同的字長。例如一臺8位機,它的1個字就等於1個字節,字長為8位。如果是一臺16位機,那麼,它的1個字就由2個字節構成,字長為16位。字是計算機進行數據處理和運算的單位。
#include <stdio.h>
void main(){
int m;
int n[5];
char str;
printf("int a:%d\n", sizeof(m));
printf("int n:%d\n", sizeof(n));
printf("int n[0]:%d\n", sizeof(n[0]));
printf("int str:%d\n", sizeof(str));
}
結果:
int a:4
int n:20
int n[0]:4
int str:1
使用關鍵字 typedef 可以為類型起一個新的別名,語法格式為:
typedef oldName newName;
oldName 是類型原來的名字,newName 是類型新的名字。
#include <stdio.h>
typedef int u32;
typedef char CHAR;
void main(){
printf("%d\n", sizeof(u32));
printf("%d\n", sizeof(CHAR));
}
用宏定義(#define)來進行數據類型別名。
#include <stdio.h>
#define u32 int
#define CHAR char
void main(){
printf("%d\n", sizeof(u32));
printf("%d\n", sizeof(CHAR));
}
#define 是 C 的預處理器指令,也稱之為 C 指令,用於為各種數據類型定義別名,與關鍵字 typedef 類似,但是它們有以下幾點不同:
typedef 僅限於自定義數據類型標識符的別名,#define 不僅可以為數據類型定義別名,也能為實際的數值定義別名。
typedef 是由編譯器處理的,#define 語句是由預處理器進行處理的。
4、數據類型的封裝(1)void的字面意思是「無類型」,void* 則為「無類型指針」,void* 可以指向任何類型的數據。
(2)數據類型封裝
典型的如內存操作函數memcpy和memset的函數原型分別為:
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );
void修飾函數返回值和參數,僅表示無。
如果函數沒有返回值,那麼應該將其聲明為void型
如果函數沒有參數,應該聲明其參數為void
(3)void指針意義
C語言規定只有相同類型的指針才可以相互賦值。
void*指針作為左值用於「接收」任意類型的指針。
void*指針作為右值賦值給其它指針時需要強制類型轉換。
C語言沒有定義void究竟是多大內存的別名。
數據類型本質是固定內存大小的別名;是個模具,c語言規定:通過數據類型定義變量。
數據類型大小計算(sizeof)。
數據類型封裝概念(void 萬能類型)。