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