-
預(yù)處理階段工作:①將頭文件展開直接放置到源文件中
? ? ? ? ? ? ? ? ? ? ? ? ? ?②宏替換
? ? ? ? ? ? ? ? ? ? ? ? ? ?③條件編譯
注意:宏替換只是簡單得字符串替換,且可以傳遞參數(shù)。
例如,#define N(n) n*10
? ? ? ? ? ?int b = N(a);? // 首先n替換成a,然后a*10。
易錯:#define ADD(a,b) a+b
? ? ? ? ? int c = ADD(a,b) * ADD(a,b);??
/* 經(jīng)過簡單的替換會得到a+b*a+b,這顯示不是我們想要的結(jié)果,因此加上括號保證優(yōu)先級不會出錯。*/
? ? ? ? ? ? #define ADD(a,b) (a+b)?
查看全部 -
生成一個.i文件,-E表示只讓gcc舉行預(yù)處理
預(yù)處理展開了頭文件,形成了main函數(shù)上面的一大串文字
查看全部 -
結(jié)構(gòu)體 數(shù)組 指針運(yùn)用
查看全部 -
(* w). 指針變量引用成員,可用 -> 代替
查看全部 -
結(jié)構(gòu)體 引用:? .? ? 成員預(yù)算符,優(yōu)先級最高
查看全部 -
.c--.i? ?預(yù)處理
.i--.s? ?編譯
.s--.o? ?匯編
.o--可執(zhí)行文件? ? 鏈接
查看全部 -
宏:反復(fù)使用的常量,數(shù)組buffer大??;為了便于修改,定義成宏
查看全部 -
.c文件—>.i文件—>.s文件—>.o文件—>可執(zhí)行文件
? ? ? 預(yù)處理? ? ? ?編譯? ? ? ? 匯編? ? ? ? ? 鏈接
查看全部 -
define ? ? 宏的聲明不需要會分號?
查看全部 -
malloc分配內(nèi)存塊的函數(shù);且需添加頭文件#include <malloc.h>;
sizeof判斷數(shù)據(jù)類型的長度符;
malloc返回的是開辟空間的首地址,他并不知道你放的是什么類型的東西,所以要用第一個括號中的內(nèi)容強(qiáng)制轉(zhuǎn)換指針類型為struct weapon*,和p1的類型轉(zhuǎn)為一樣,否則會警告指針類型不符合;
查看全部 -
union讓不同類型的變量共用同一個內(nèi)存單元,能節(jié)省內(nèi)存空間,但只能存儲一個成員;
聲明方法:
union [name]{
????...
};
使用:union [union_name] [value_name];
共用體聲明時只能有一個常量。給共用體成員賦值時后賦值的變量值會覆蓋前一個。
共用體所占的內(nèi)存地址是其成員中內(nèi)存地址最大的成員的內(nèi)存地址。
結(jié)構(gòu)體對象大小=最后一個成員的大小+最后一個成員的偏移量+填充字節(jié)數(shù)
偏移量:結(jié)構(gòu)體中一個成員相對于結(jié)構(gòu)體的首字節(jié)(即第一個成員的首字節(jié))所距離的大小。(那么第一個成員相對于結(jié)構(gòu)體的偏移量為0)
每個成員所占內(nèi)存大小的偏移量=成員字節(jié)大小的整數(shù)倍。(若不是,則編譯器會在前一個成員后做字節(jié)填充,使這個成員的偏移量=字節(jié)大小的整數(shù)倍。計算結(jié)構(gòu)體內(nèi)存地址大小時若總大小不等于最大成員字節(jié)大小的整數(shù)倍,會在最后一個成員后做字節(jié)填充。)
打印結(jié)構(gòu)體的字節(jié)數(shù):
printf("%lu",sizeof(...));
共用體元素地址都相同,可用:printf("%p\n",&data_1.a);
查看全部 -
如何對結(jié)構(gòu)體進(jìn)行初始化和訪問結(jié)構(gòu)體成員:
1、初始化 在花括號內(nèi) 對結(jié)構(gòu)體內(nèi)變量成員依次賦值即可
struct weapon weapon_1 = {"w_name",100,200};
2、訪問結(jié)構(gòu)體成員:使用運(yùn)算符.
:weapon_1.name,weapon_1.price//根據(jù)初始化的內(nèi)容,=200
3、結(jié)構(gòu)體數(shù)組,數(shù)組元素是結(jié)構(gòu)體 struct weapon weapon_2[2]={"weapon_name1",50,100,"weapon_name2",100,200}; 或struct weapon weapon_2[2]={{"weapon_name1",50,100},{"weapon_name2",100,200}};
查看全部 -
結(jié)構(gòu)體struct 是不同類型變量的集合,struct+結(jié)構(gòu)體類型名稱+{類型+變量1;類型+變量2......};
三種寫法:1、struct +結(jié)構(gòu)體類型名稱+{類型+變量1;類型+變量2......};再在主函數(shù)中引用 struct +結(jié)構(gòu)體類型名稱+結(jié)構(gòu)體名稱;eg:struct weapon{char name[20];int atk ;}; struct weapon weapon_1;
2、直接在聲明時定義,eg:struct weapon{char name[20];int atk ;} weapon_1;//大型程序中不便于維護(hù)
3、不指定結(jié)構(gòu)體類型名稱,但只能定義一種結(jié)構(gòu)體。
查看全部 -
typedef 在預(yù)處理后不作替換處理,且語句后需加分號;作用域?yàn)楫?dāng)前大括號中,而宏定義則為全局通用;typedef一般用于結(jié)構(gòu)體,eg:typedef struct stu{? } stu_t ;
查看全部 -
宏定義命令符 define 例:#define R 10
編譯器預(yù)處理時將宏定義視為字符串并進(jìn)行替換,
查看全部
舉報