2.1數據類型知多少
對於類型所佔的內存是多大,能夠使用sizeof()測試。
空類型:普通變量沒有這個類型,指針類型有這個類型
數據類型的本質是:固定內存大小的別名。
2.2基本類型數組
int main() { int a;//告訴編譯器分配4個字節 int b[10];//告訴編譯器分配4*10個字節 //類型的本質是固定內存塊大小的別名 //同過sizeof()測試具體分配多大的內存空間 printf("sizeof(a)=%d sizeof(b)=%d\n",sizeof(a),sizeof(b)); return 0; }
運行結果:ide
//打印數組b的地址 printf("b=%d &b=%d",&b,b);
運行結果:
函數
//數組加1 printf("b=%d &b=%d\n",b+1,&b+1);
地址同樣,爲何+1後就不同了那?測試
//是數組首元素地址,一個元素4個字節,加一就是在原地址上加4個字節 //&b是整個數組的首地址,一個數組是4*40=40個字節,加1就是加了40 //測一下指針變量的內存大小是多少 //指針長度是:32位系統,指針長度都是4 // 64位系統,指針長度都是8 char *p; printf("sizeof(p)=%d\n",sizeof (p)); double ***q; printf("sizeof(q)=%d\n",sizeof (q));
運行結果:
2.3數據類型的別名:typedef3d
typedef unsigned int u32; //第一種結構體 struct std1 { int a; int b; }; //第二種別名結構體 typedef struct std2 { int c; int d; }std2; int main() { u32 t;//給unsigned int 類型取別名 t=33; //typedef 一般與結構體一塊兒使用 //使用第一種結構體 struct std1 std={1,2}; std.a=3; //使用第二種別名結構體 std2 std3={3,4}; std3.c=2; return 0; }
2.4void類型
先看一下void怎麼用指針
//* void 無類型 // * 1函數參數爲空,定義函數時,能夠用void修飾 // * 例如:int fun(void); // * 2函數沒有返回值:void fun(void); // * 3不能定義void類型的普通變量:void a;//error沒法肯定類型,不一樣類型分配內存不同 // * 4能夠定義void *變量:void *p;//ok,32位分配4個字節,64位分配8個字節,能夠固定 // * 5數據類型本質就是固定內存塊大小 // * 6void *p萬能指針,函數返回值,函數參數 int main() { // c語言規定:只有相同類型的指針才能相互賦值,如是不一樣須要類型強制轉換 char *p=(char *)malloc(sizeof(char)*10); return 0; }
void的具體用法咱們會在後面慢慢體會它的好處。
2.5變量
C語言規則:變量必須先定義才能使用。code
//變量本質是一段連續的內存空間別名 //變量至關如門牌號,而內存就至關於房間 //能夠經過門牌號找到房間 int main() { //直接賦值 int a=20; int *p; printf("a=%d\n",a); //間接賦值 //指針指向誰,就把誰的地址賦值給指針,指針就指向其內存 printf("&a=%d\n",&a); p=&a; printf("p=%d\n",p); *p=10; printf("a=%d\n",a); printf("*p=%d\n",*p); return 0; }
運行結果:
blog