HeadFirst筆記系列——第二章 指針和輸入輸出

作為一個(gè)Android開發(fā)者如果想閱讀源碼只會(huì)Java語言是不夠的仲智,由于工作的原因要求去了解源碼的一些邏輯尝丐,發(fā)現(xiàn)在看書和閱讀源碼的過程中不懂C語言真的寸步難行绰筛,只靠Java的那點(diǎn)基礎(chǔ)去理解C語言的語法很費(fèi)勁娇澎,所以在工作的間隙去學(xué)習(xí)C語言疲恢,目的不是能夠?qū)懗龆嗯5腃代碼凶朗,只是能夠看得懂別人的C代碼,知道每段代碼的意思显拳。下面從第二章開始記錄我讀《HeadFirst C》的筆記棚愤。

指針

指針即數(shù)據(jù)存放的地址值,指針變量接收的就是地址值
指針的使用方法:

&x   表示變量x的地址值
int*  是一個(gè)指針數(shù)據(jù)類型杂数,表示一個(gè)存放整型變量的地址值數(shù)據(jù)類型
*y     表示地址y上存放的數(shù)據(jù)

如下:

int   x = 5;
int*  m = &x;      //m就是一個(gè)指針變量宛畦,接收x的地址值
x = *m;           //獲取x地址值上存放的變量

注意:
1:指針的長度只和操作系統(tǒng)的位數(shù)有關(guān),32位的操作系統(tǒng)指針長度為4揍移,64位操作系統(tǒng)的指針長度為8
2:當(dāng)數(shù)組被當(dāng)做形式參數(shù)傳遞的時(shí)候次和,數(shù)組可以被用來當(dāng)做指針來處理,它指向數(shù)組的第一個(gè)地址位置

指針和數(shù)組的區(qū)別:
1:使用sizeof不同那伐,指針變量的長度只有4和8踏施,但是使用sizeof(數(shù)組),返回的是數(shù)組的長度
2:數(shù)組變量的地址就是它本身罕邀,指針變量的地址不是它本身畅形。如下:

char s[] = "How big is it";  //變量s是數(shù)組變量
char*  t = s;                //變量t是指針變量

其中&s==s ,但是 &t != t 诉探;
3:數(shù)組變量不能指向其他地方日熬。
創(chuàng)建指針變量的時(shí)候,計(jì)算機(jī)會(huì)為它分配4或8個(gè)字節(jié)的存儲(chǔ)空間阵具,但是創(chuàng)建數(shù)組的時(shí)候計(jì)算機(jī)不會(huì)為數(shù)組變量分配任何空間碍遍,編譯器僅在出現(xiàn)它的地方把它替換成數(shù)組的實(shí)際地址,所以不能把數(shù)組變量指向其他地方阳液。
上面的例子 s = t 怕敬,將t 賦值給 s 會(huì)報(bào)錯(cuò)

輸入

C語言中輸入主要用到兩個(gè)函數(shù)scanffgets

scanf函數(shù)

1:使用方式:

char name[5];
printf("Enter your name:");
scanf("%4s",name);
printf("name: %s\n",name);

scanf接收一個(gè)char指針,上面的代碼要求總共會(huì)讀取4個(gè)字符帘皿,加上字符串結(jié)束符\0,一共5個(gè)所以字符數(shù)組的長度定義為5东跪,如果用戶輸入大于4個(gè)字符,也只會(huì)顯示4個(gè)字符

2:scanf的弊端:
使用這個(gè)函數(shù)的時(shí)候一定要嚴(yán)格限制用戶輸入的字符數(shù),一旦輸入的過多就會(huì)導(dǎo)致緩沖區(qū)溢出虽填,所以scanf的第一個(gè)參數(shù)我們一般會(huì)控制字符數(shù)而不是直接使用%s丁恭,但是并不是什么時(shí)候輸入的字符多了都會(huì)報(bào)錯(cuò)的,即使這樣我們也要控制

fgets 函數(shù)

1:使用方式:
fgets() 這個(gè)函數(shù)和scanf() 一樣也是接收char指針斋日,但是在使用它的時(shí)候你必須給出最大長度·牲览,fgets的返回值是char* 類型,是用戶輸入的字符串恶守。

char food[5];
printf("your food:");
fgets(food,sizeof(food),stdin);  //sizeof設(shè)置了最大長度第献,stdin表示數(shù)據(jù)來自鍵盤
printf("you enter is %s\n",food);

2:使用注意:
這里food是一個(gè)數(shù)組所以可以使用sizeof來獲取長度,當(dāng)food是一個(gè)指針的時(shí)候就不能使用sizeof了兔港,因?yàn)橹羔樀拈L度是固定的庸毫,此時(shí)需要顯式的給出具體長度

fgets的長度已經(jīng)算上了結(jié)束符\0,所以上面的例子food中也只能接受4個(gè)字符

scanf函數(shù)和fgets 函數(shù)的區(qū)別

1:使用方式不同衫樊。都接收一個(gè)字符數(shù)組飒赃,但是scanf是手動(dòng)限制用戶輸入的字符個(gè)數(shù),fgets是通過參數(shù)的形式限制

//scanf的使用
char name[5];
printf("Enter your name:");
scanf("%4s",name);            //在這里手動(dòng)限制用戶科侈,只能輸入4個(gè)字符载佳,因?yàn)橐还簿徒邮?個(gè)
printf("name: %s\n",name);
//fget的使用
char food[5];
printf("your food:");
fgets(food,sizeof(food),stdin);  //在這里通過參數(shù)sizeof 來限制輸入的字符數(shù),也是只能輸入4個(gè)
printf("you enter is %s\n",food);

2:返回值不同兑徘。scanf 返回值是用戶輸入的數(shù)據(jù)條數(shù)刚盈,int類型;fgets 返回值是用戶每次輸入的數(shù)據(jù)挂脑,字符串類型

輸出

C語言中輸出到控制臺(tái)主要使用 puts 和 printf 函數(shù)
二者的區(qū)別:這兩個(gè)函數(shù)都是用來打印字符串的藕漱,區(qū)別是puts輸入完之后會(huì)自動(dòng)換行,printf不會(huì)自動(dòng)換行崭闲,需要手動(dòng)加上\n

C語言中的字符串

在C語言中是沒有字符串這個(gè)變量的肋联,C語言中字符數(shù)組就相當(dāng)于java中的字符串,使用流程如下:

1:導(dǎo)入C標(biāo)準(zhǔn)庫 <string.h>
2:對(duì)字符串的操作方法:

int strchr(char* original_str , char* target_str ) : 在字符串中查找字符刁俭,返回正表示找到橄仍,負(fù)數(shù)表示沒有
int strcmp(char* a,char* b): 比較字符串,比較字符串在字母表中的前后順序,返回int值牍戚。正:升序侮繁;負(fù):降序
strcpy() : 復(fù)制字符串
strlen() : 返回字符串的長度
strcat() : 連接字符串
strerror(errno) : 這個(gè)函數(shù)會(huì)顯示exec()函數(shù)運(yùn)行過程中出現(xiàn)的錯(cuò)誤

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市如孝,隨后出現(xiàn)的幾起案子宪哩,更是在濱河造成了極大的恐慌,老刑警劉巖第晰,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锁孟,死亡現(xiàn)場離奇詭異彬祖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)品抽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門储笑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人圆恤,你說我怎么就攤上這事突倍。” “怎么了哑了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵赘方,是天一觀的道長。 經(jīng)常有香客問我弱左,道長,這世上最難降的妖魔是什么炕淮? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任拆火,我火速辦了婚禮,結(jié)果婚禮上涂圆,老公的妹妹穿的比我還像新娘们镜。我一直安慰自己,他們只是感情好润歉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布模狭。 她就那樣靜靜地躺著,像睡著了一般踩衩。 火紅的嫁衣襯著肌膚如雪嚼鹉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天驱富,我揣著相機(jī)與錄音锚赤,去河邊找鬼。 笑死褐鸥,一個(gè)胖子當(dāng)著我的面吹牛线脚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叫榕,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼浑侥,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了晰绎?” 一聲冷哼從身側(cè)響起寓落,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寒匙,沒想到半個(gè)月后零如,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏将,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年考蕾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祸憋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肖卧,死狀恐怖蚯窥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塞帐,我是刑警寧澤拦赠,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站葵姥,受9級(jí)特大地震影響荷鼠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榔幸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一允乐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧削咆,春花似錦牍疏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞻惋,卻和暖如春厦滤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熟史。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工馁害, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹂匹。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓碘菜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親限寞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忍啸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一履植。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)计雌; ...
    朱森閱讀 3,451評(píng)論 3 44
  • C/C++輸入輸出流總結(jié) 前兩天寫C++實(shí)習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生玫霎,打了好長時(shí)間的文件都沒有打開凿滤,今天終...
    LuckTime閱讀 1,738評(píng)論 0 6
  • 第1章 第一個(gè)C程序第2章 C語言基礎(chǔ)第3章 變量和數(shù)據(jù)類型第4章 順序結(jié)構(gòu)程序設(shè)計(jì)第5章 條件結(jié)構(gòu)程序設(shè)計(jì)第6章...
    小獅子365閱讀 10,675評(píng)論 3 71
  • 版權(quán)聲明:本文為 gfson 原創(chuàng)文章翁脆,轉(zhuǎn)載請(qǐng)注明出處眷蚓。注:作者水平有限,文中如有不恰當(dāng)之處反番,請(qǐng)予以指正沙热,萬分感謝...
    gfson閱讀 3,035評(píng)論 0 6
  • 在我的記憶中,小時(shí)候的端午節(jié)是這樣過的:母親早早地起床罢缸,去靠近坑沿的地頭割艾草篙贸。回來后 枫疆,用紅線繩系著艾草...
    那年五月閱讀 658評(píng)論 5 7