先介紹一下游戲背景:一個(gè)肥宅,怒悶的問自己為什么沒有女生看得上為什么出生沒有含著金鑰匙為什么自己一無是處,于是他走上了攀登C語言圣山的無盡旅途…
在寶興等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,寶興網(wǎng)站建設(shè)費(fèi)用合理。第一篇:新手村:一望無際的C圣殿山頂。 一.新手大禮包或許是前世轉(zhuǎn)世給造物主充了錢,肥宅還未踏入新手村就在路上撿到了大禮包。他打開一看,哇,暴率是真的高:
\0
為字符串的結(jié)束標(biāo)志,\t
為空格\ddd
為1~3個(gè)八進(jìn)制的數(shù)字()。xdd
為2個(gè)十六進(jìn)制的數(shù)字,\'
為輸出單引號(hào),\"
為輸出雙引號(hào)。
例子:
printf("%d\n", strlen("c:\test\328\test.c"));
結(jié)果輸出14。分析:共{'c', ':', '\t', 'e', 's', 't', '\328', '\t', 'e', 's', 't', '.', 'c', '\0'}
共14個(gè)字符
判斷語句內(nèi)為執(zhí)行語句時(shí),先執(zhí)行,然后判斷執(zhí)行語句所操作的值(個(gè)人理解為左值優(yōu)先,沒有左值判斷右值(雖然C語言好像沒有右值概念))是否為0
例子:
int i = 0;
int k = 0;
for(i = 0, k = 0; i++, k++)
k++;
...
for循環(huán)執(zhí)行了0次,因?yàn)橹虚g為判斷語句,先執(zhí)行再判斷,將k值賦0后,判斷k的值是否為0,為0則跳出循環(huán)。這一段代碼中k一直都是0,沒出生過(bushi)。
這又帶來了一個(gè)問題,如果判斷語句中寫一個(gè)沒有返回值的函數(shù),它會(huì)如何做判斷呢?使用C++(QT)試了試,結(jié)果如下
生成隨即數(shù)的函數(shù)int rand(void)
,來自頭文件
,需要void srand(unsigned inte seed)
先設(shè)置隨即生成函數(shù)的規(guī)則,輸入不隨程序影響,一直變換的值就能得到隨機(jī)數(shù)(比如時(shí)間戳)
system()括號(hào)內(nèi)跟shell命令等同于跟系統(tǒng)終端輸入命令
strcmp函數(shù)bool strcmp(char a, char b)
比較a,b是否相同,相同返回0
例子:
n:
...;
goto n;
goto語句不能跨函數(shù)跳轉(zhuǎn)。
對(duì)于多重循環(huán)要一次性跳出多個(gè)循環(huán)的時(shí)候才顯的好用(其他時(shí)候不該用(不然你的領(lǐng)導(dǎo)會(huì)吃了你的)):
for(...){for(...){for(...){ ...
if(disater)
goto error;
}
}
...
error:
if(disater)
//處理錯(cuò)誤情況
}
字符數(shù)組初始化char arr1[] = "abc";
為字符串初始化,最后會(huì)有\0
字符,所以初始化為4字符數(shù)組,最后一個(gè)值為\0
char arr2[3] = {'a', 'b', 'c'};
為傳值初始化,傳入3個(gè)字符參數(shù),所以初始化為3字符數(shù)組。
查看地址值可以用%p
參數(shù),例如printf("&arr[%d] = %p\n", i, &arr[i]);
void arr(int arr[]){int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d", sz); //1
}
int main(){int arr[10];
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d", sz); //2
arr(arr);
}
1處打印值為1,2處打印值為10。為什么會(huì)有不同?:
int sz = sizeof(arr) / sizeof(arr[0]);
中,sizeof(arr)
中的arr不同與一般理解!arr表示的是整個(gè)數(shù)組的指針,除此之外只有&arr
也是這樣,可以這么說,&arr + 1 - arr[0]
為10個(gè)元素類型長(zhǎng)度的值而非1個(gè)。所以sizeof(arr)
沒有問題。
問題在與函數(shù)聲明的型參上。arr(int arr[])
本質(zhì)上和arr(int* arr)
一樣為指針類型,因此在sizeof()
中不認(rèn)為是數(shù)組類型,因此只返回一個(gè)元素的大小。而在主函數(shù)中arr定義為數(shù)組,所以能打印出正確的值。(型參可以改為arr(&int arr[])
這樣在函數(shù)內(nèi)部也能認(rèn)為是數(shù)組)(存疑)
例如10%3
符號(hào)兩邊必須為整數(shù),不能是浮點(diǎn)數(shù),返回取余后的值,操作的是二進(jìn)制位
左移右移右邊的值都只能是正整數(shù),負(fù)數(shù)沒有定義
左移操作符<<左邊拋棄,右邊補(bǔ)0,不賦值不會(huì)使變量發(fā)生變化。
右移操作符 >>有兩種方式,取決于編譯器
第一種算術(shù)右移,左邊補(bǔ)原來位數(shù)的值(1則補(bǔ)1,0則補(bǔ)0),右邊拋棄
第二種邏輯右移,左邊補(bǔ)0,右邊拋棄
位操作符 如何僅用位操作符來完成兩個(gè)數(shù)的交換a = a ^ b;
b = a ^ b;
a = a ^ b;
可以這樣來理解:
b = a ^ b
即為b = (a') ^ b = a ^ b ^ b = a ^ (b ^ b) = a
a = a ^ b
即為a = (a') ^ (b') = (a ^ b) ^ (a) = b ^ (a ^ a) = b
判斷整數(shù)(32位)有多少個(gè)二進(jìn)制位1,高級(jí)做法:(不明覺厲?。。?/p>
whil(num){++count;
num &= (num - 1);
}
num &= (num - 1)
相當(dāng)于做了判斷二進(jìn)制數(shù)組中最靠右的1在哪里同時(shí)去掉了比這個(gè)1更右的位數(shù)(左補(bǔ)齊0),進(jìn)而循環(huán)判斷num
就能通過循環(huán)次數(shù)得出結(jié)果。
~
對(duì)一個(gè)數(shù)的二進(jìn)制位按位取反
++a (–a) 先a’=a+1,后b=a’,另一種理解為return(a+1)
a++ (a–) 先b=a, 后a=a+1,另一種理解為return a, a=a+1;
sizeof
是操作符,可以sizeof int
但是對(duì)于struct student
不適用,因?yàn)?code>sizeof優(yōu)先級(jí)很高
&& 若左邊為0,右邊全忽視(當(dāng)然要考慮到符號(hào)執(zhí)行順序的問題)
|| 若左邊為1,右邊全忽視
逗號(hào)操作符號(hào),…,…,…;這條語句最后返回的結(jié)果為最后執(zhí)行(即最后一個(gè)小語句)的結(jié)果。
算術(shù)表達(dá)式中的強(qiáng)制轉(zhuǎn)換 整形提升按照最高位的符號(hào)位(0或1)來提升(左補(bǔ)齊),不足整形提升為整體(長(zhǎng)度)。
只要參與了表達(dá)式運(yùn)算(包括邏輯運(yùn)算),就會(huì)發(fā)生 整形提升
尋常算術(shù)轉(zhuǎn)換賦值時(shí),賦值前的變量會(huì)嘗試轉(zhuǎn)換為賦值后的。
計(jì)算時(shí),底精度的會(huì)轉(zhuǎn)換成高精度的。(有符號(hào)數(shù)比無符號(hào)數(shù)精度底)
操作符的執(zhí)行順序對(duì)于考操作符的題目,就盡量按照 順序,結(jié)合性,是否改變操作性來判斷,只要結(jié)果相等,不需要完全的判斷唯一路徑。
但對(duì)于寫代碼時(shí),不要寫不能確定唯一路徑的算式
例子a * b+c * d+e * f
這樣只根據(jù)三原則定理是無法判斷出唯一路徑的
在32位系統(tǒng)為4字節(jié),64位系統(tǒng)為8字節(jié)
指針類型的意義不同的指針類型的步長(zhǎng)是不一樣的(*p+1),這意味著不同類型的指針能操作的字節(jié)空間數(shù)的權(quán)限是不一樣的。字節(jié)是地址,但對(duì)于遞歸時(shí)的指向性(下一個(gè)地址值指向哪里)是有指針類型決定的
指針減去指針前提是指針類型一致且處在同一塊連續(xù)的空間(比如數(shù)組)
返回相隔元素的個(gè)數(shù)(可以小指針減大指針,為負(fù)數(shù))
另:標(biāo)準(zhǔn)規(guī)定,對(duì)于比較而言,可以允許與數(shù)組最后一個(gè)元素的指針的后一個(gè)元素(指針尾)進(jìn)行比較,而對(duì)于第一個(gè)元素的指針的前一個(gè)指針則沒允許的規(guī)定
結(jié)構(gòu)體的聲明三步走:
typedef struct Stu{int num;
char name;
}Stu; //后可跟初始化,例如: = {1,"richard"}
定義:
struct Stu p1; // 初始化使用大括號(hào)
結(jié)構(gòu)體傳參最好傳結(jié)構(gòu)體指針
肥宅這真是撿到寶,拿著這個(gè)包直接閉關(guān),十年之后又是一條好漢!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧