-
宏定義定義的計算,只是字符串,計算要等到函數調用時執行,所以定義時注意加(),保證優先級。
宏定義的函數沒有數據類型的限制。
查看全部 -
宏#define 標識符 字符串(無;)
宏不遵循C的語法,僅是字符串的替換。
用法:
定義常量和數組buffer
傳遞參數,相當于函數功能。
查看全部 -
編譯包括4個步驟:預處理(i)、編譯()、匯編()、鏈接()。
預處理:
.c和.i文件都是C的語法。.i展開了頭文件同時進行宏替換(宏定義)。
查看全部 -
struct?weapon{ ?char?name[20]; ?int?atk; ?int?price; } struct?weapon?weapin_2[2]?=?{{"weapon_name1",50,100},{"weapon_name2",100,200}}; 結構體數初始化賦值都要一一對齊。
查看全部 -
變量先申明后定義,定義和申明可以放在一起,可以分離。
查看全部 -
結構體聲明與定義:
struct weapon{
????char name[20];
????int atk;
????int price;
}weapon_1;
結構體初始化:
struct weapon weapon_1 = {"weapon_name",100,200 };
結構體變量訪問使用”.“運算符,該運算符具有最高的優先級。
查看全部 -
typedef VS define:
①預處理時define定義的宏會替換,但typedef定義的別名不會替換。
②作用域不同
③通常用于給自定義數據類型其別名
size_t : unsigned long的別名
查看全部 -
預處理階段工作:①將頭文件展開直接放置到源文件中
? ? ? ? ? ? ? ? ? ? ? ? ? ?②宏替換
? ? ? ? ? ? ? ? ? ? ? ? ? ?③條件編譯
注意:宏替換只是簡單得字符串替換,且可以傳遞參數。
例如,#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);??
/* 經過簡單的替換會得到a+b*a+b,這顯示不是我們想要的結果,因此加上括號保證優先級不會出錯。*/
? ? ? ? ? ? #define ADD(a,b) (a+b)?
查看全部 -
宏只是字符串的替換,不考慮語法規則查看全部
-
000000000000000000002.3
查看全部 -
int func(int n)//求階乘
{
int r;
if(n<0)printf("data error");
else if(n==0||n==1)r=1;
else r=n*func(n-1);
return r;
}
n>31結果不準確
查看全部 -
<<左移若干位
>>右移若干位
int a=3;//00000011
a<<4=00110000=48,高四位被舍棄
左移n位 a*2^n,符號位溢出
右移n位 a/2^n,根據符號位決定左邊補0還是1
查看全部 -
按位異或:不相同的時候為1,相同為0
定位反轉:a=a^0xFF,00001001->11110110
數值交換:a=a^b;b=b^a;a=a^b;
查看全部 -
按位或,有一個為1則為1
設定數據的指定位置:a|0xFF設置低8位為1
查看全部 -
位 0 false 1 true
&按位與,整型或字符型,補碼
a=4;00000000000000000000000000000100
b=7;00000000000000000000000000000111
a&b=00000000000000000000000000000100=4
迅速清零a&0=0
保留指定位置a&1=a
判斷奇偶性
|按位或
^按位異或
~按位取反
<<左移
>>右移
查看全部
舉報