-
結構體初始化:struct weapon weapon_1={"weapon_name,100,200};
調用:printf("%s\n",weapon_1.name);
結構體數組:
struct weapon weapon_1[2]={
{"weapon_name1",50,100},? ? {"weapon_name2",100,200}? ? ? ? ?};
調用:weapon_1[0].name;? weapon_1[1].atk;
查看全部 -
結構體:與數組相反,存儲的是一組不同類型的數據,如一把槍;
struct weapon{
????char name[20];
????int atk;
????int price;
};? ? ? ? ? //這里只是定義,沒有賦值,所以沒有分配空間
聲明:struct?weapon(只定義一個變量時可以省略){ char?name[20]; int?atk; int?price; }weapon_1;????//這樣就只有一個變量了 或者:struct?weapon?weapon_1;
查看全部 -
typedef與#define易混淆
typedef有作用域;要用分號結束;遵循C語言語法規則;只是別名,預處理時不替換;?
查看全部 -
宏還可以傳遞參數
#define?N(n)?n*10
main函數中:int b=N(5);? ?即是int b=5*10;
#define?add(a,b)?a+b main函數中:int?x=add(20,30)?//x=20+30=50 ??int?x=add(20,30)*add(20,30)??//x=20+30*20+30=650而非2500 ??也就是說,宏替換只是替換,并不能運算 ??所以最好加(),即#define?add(a,b)?(a+b)
宏的優勢:可以不考慮參數類型:
int?add(int?a,int?b){return?a+b;}?對比:
#define?add(a,b)?(a+b)
查看全部 -
1.reventon@reventon-virtual-machine:~$? vim helloworld.c?
(新建helloworld.c源文件)
2.編碼
3.編譯: gcc helloworld.c(生成一可執行文件)
? ? ? ? ? ?執行所生成的文件 ./a.out
? ? ? ? ? ?會輸出helloworld
編譯的四個步驟:
.c文件? .i文件 .s文件? .o文件 (可執行文件)
? ? ? ?預處理? ? ? 編譯? ? ? ? 匯編? ? ? ?鏈接
gcc -o helloworld.i helloworld.c -E
? ? ? ? ? ? ? ?(生成.i文件)? ? ? ? ? ? ?‖只讓gcc進行預處理
回車,vi helloworld.i (看helloworld.i文件)
有大量代碼,:$ (直接跳到代碼底端)
底端是main函數,
上面的大量是#include <stadio.h>的展開
所以預處理的第一件事是展開頭文件
第二件是宏替換
宏不考慮語法,隨便替換
#define M int main(
M)? ? ? ? ? //即int main(
查看全部 -
按位 & 運算的應用:
?????1,判斷一個數的奇偶性, 和1做按位&運算,結果得0,為偶數,得1為奇數;
????2, 進行字節的篩選,將要篩選的字節,和(11111)進行與運算;
????3,快速清零
查看全部 -
靜態鏈表結構圖
查看全部 -
編譯的四個步驟
查看全部 -
a?|?0??也能判斷奇偶
查看全部 -
&?清0,保留某些位,判斷奇偶
查看全部 -
#define R 20 typedef int u32查看全部
-
宏定義,不考慮 數據類型,c語法查看全部
-
宏定義,不考慮c語法查看全部
-
C編譯過程
查看全部 -
編譯指令:預處理,宏定義
建立自己的數據類型:結構體,聯合體,動態數據結構
邏輯運算符:&,|,~,^,<<,>>
遞歸函數的調用方法
查看全部
舉報