1. 程式人生 > >記憶C語言運算符(文末福利)

記憶C語言運算符(文末福利)

C語言 編程語言

點擊上方“異步社區”,選擇“置頂公眾號”

技術幹貨,第一時間送達




技術分享圖片

學習第一門編程語言的時候,你很可能是讀過一本書,輸入了你不太懂的代碼,然後試圖弄懂它們的原理。我寫的其他書大多是這個樣子,這對初學者非常有效。初學的時候,對於有一些復雜的主題,你需要在弄懂它們之前先學會怎麽用,因此這是一個簡單的學習方式。

然而,一旦你已經學過了一門編程語言,這種慢速摸索語法的方法就不那麽有效了。這樣學習語言是可以的,但是有一種更快的方法讓你學會編程技能,並且建立起使用的信心。這種學習編程的方法像是魔術,但你要相信我,它的效果出奇地好。如果你覺得文章不夠看,可以先拿出手機看一段視頻。

技術分享圖片

掃一掃看視頻

學習C語言的時候,我想要你首先記住所有的基本符號和語法,然後將它們用到一系列的習題中。

這種方法和你學習人類語言的過程很相似:記憶單詞和語法,然後將記住的東西用到對話中。只要一開始下功夫簡單記住一些東西,你就有了足夠的基礎知識,以後讀寫C代碼就更容易了。

警告

有的人極其反對背誦記憶。一般他們會說這會抹殺你的想象力,讓你變成呆子。其實不會,我就是一個活的證據。我會畫油畫,會彈吉他,會制作吉他,會唱歌,會寫代碼,會寫書,而且我背過很多東西。因此,這種說法不但毫無根據,而且會破壞學習效率。別把他們的話當回事兒。

1.1 如何記憶

最好的記憶方法過程其實很簡單。

1.創建一系列的速記卡,將符號寫在一面,將描述寫在另一面。你還可以使用一個叫Anki的程序在計算機上完成這件事。我喜歡自己制作速記卡,因為制作的過程也有助於記憶。

2.將速記卡打亂,然後一張一張開始瀏覽,先只看其中的一面,努力想想另一面的內容,別著急看答案。

3.如果無法想起另一面的內容,那就看看答案,然後復述答案,再把卡片放到單獨的一摞裏邊。

4.看完所有的卡片以後,你手頭就有兩摞卡片了:一摞是你能快速記起的,另一摞是你沒有記住的。拿起沒記住的那一摞,下功夫努力去記這些卡片。

5.一個階段結束以後(通常是15~30分鐘),你手頭還是會有一摞沒記住的卡片。將這些卡片隨身攜帶,只要有空,就背一會兒裏邊的內容。

記憶的技巧有很多,不過我發現,這是讓你能做到即時想起你需要能立即使用的東西的最好方法。C語言的符號、關鍵字、語法是你需要即時想起的東西,所以這個方法最適用。

另外還要記住,你需要做到卡片的雙面記憶。你應該能做到通過描述知道對應的符號,也要能從符號知道它的描述。

最後,你不需要專門停下來去背這些運算符。最好的方法是將其和書中的習題結合起來,以便對記憶的內容進行應用。關於這一點參見下一個習題。

1.2 運算符列表

首先要列出的是算術運算符,與幾乎每一種編程語言裏的算術運算符都很像。寫卡片的時候,描述中要寫上它是算術運算符,並說明它的具體功能。

技術分享圖片

關系運算符用於測試等值性,它們在各種編程語言中也都很常見。

技術分享圖片

邏輯運算符用於邏輯測試,它們的功能你應該已經知道了。唯一特殊的是邏輯三元運算符(logical ternary),你將會在本文的後面學到。

技術分享圖片

按位運算符做的事在現代代碼中不常見到。它們會用各種方式改變構成字節和其他數據結構的位。我不會在本文中講這些,不過在一些特定類型底層系統中,它們用起來會非常順手。

技術分享圖片

賦值運算符的作用是將表達式賦給變量,不過C語言中很多運算符都可以和賦值合並使用。因而,當我說“與等”(and-equal),我說的是按位運算符,而不是邏輯運算符。

技術分享圖片

我把下面的操作叫數據運算符,不過它們其實處理的是指針、成員訪問,以及C語言的各種數據結構的元素。

技術分享圖片

最後還有一些雜項符號,它們要麽用途多變(如,),要麽由於各種原因沒法歸類,所以一並列在下面。

技術分享圖片

一邊學習速記卡,一邊繼續閱讀本文。如果你每次學習之前花15~30分鐘攻讀速記卡,每天睡前也花15~30分鐘,那麽應該用不了幾個星期你就能都記住了。

記憶C語言語法

學完運算符以後,就該記憶你將用到的關鍵字和基本語法結構了。相信我,你花在記憶上的少量時間,會在後面閱讀本文時給你巨大的回報。

正如我在習題5中提到的,你不需要停止閱讀本文專門去記憶,你可以兩者同時進行,而且也應該這樣做。在每天編碼之前,用你的速記卡作為熱身。將卡片拿出來,背上15~30分鐘,然後坐下來做本文的習題。在你閱讀本文的時候,試著將你輸入的代碼作為一種記憶練習。有一個小技巧,就是在你寫代碼的過程中,將你看到後沒法直接想起的運算符和關鍵字的速記卡收集在一起。一天的學習結束以後,再花15~30分鐘學習記憶這些卡片上的內容。

堅持這樣做,你就可以更快、更牢固地學會C語言。這比你只通過錄入代碼,四處碰壁,最後得到一堆二手記憶的過程要高效得多。

1.3 關鍵字

編程語言中的關鍵字(keyword)是擴展其符號集的一些單詞,它們讓編程語言更加易讀。有一些語言(如APL)並沒有真正的關鍵字,還有一些語言(如Forth和LISP)除了關鍵字幾乎什麽都沒有。介於中間的就是像C、Python、Ruby以及很多語言一樣的語言,這些語言的基本內容是由關鍵字和符號混合構成的。

警告

編程語言中處理符號和關鍵字的過程叫作詞法分析(lexical analysis)。這些符號和關鍵字中的任一單詞叫作詞素(lexeme)。

關鍵字描述

技術分享圖片


技術分享圖片

1.4 語法結構

我建議你記住這些關鍵字,也記住語法結構。語法結構(syntax structure)是一系列符號的模式,用來組成C程序的代碼格式,如if語句或者while循環這樣的固定結構。你應該會發現下面大部分內容都很熟悉,因為你已經學過了一門語言。你唯一要做是學習其在C語言中的做法。

下面是閱讀這些內容的方法。

  1. 全大寫意味著該位置需要填入內容或空位。

  2. 看到方括號中有全大寫就意味著這部分內容是可選的。

  3. 測試你對語法結構的記憶的最好方法是打開文本編輯器,在其中當你看到了一個switch語句,那就說出它的功能,然後試著寫出代碼格式。

if語句是基本邏輯分支控制工具:

技術分享圖片

switch語句和if語句類似,但它對簡單的整型常量才有效:

技術分享圖片

while循環是最基本的循環:

技術分享圖片

你還可以使用continue來實現循環。我們暫時就叫它while-continue循環:

技術分享圖片

你還可以使用break退出循環。我們稱其為while-break循環:

技術分享圖片

do-while循環是while循環的逆轉,它會先運行代碼,然後再測試條件來看是不是需要再次運行代碼:

技術分享圖片

它裏邊也可以有continue和break,用來控制其運行方式。

for循環是一個可控的計數循環,它使用計數器來實現(期望的)固定次數的叠代:

技術分享圖片

enum會創建一組整型常量:

技術分享圖片

goto會跳到一個標簽的位置,只在很少的情況下有用,如錯誤檢測和退出的時候:

技術分享圖片

函數是這樣定義的:

技術分享圖片

這個也許不好記,那就來看看下面這個例子,然後你就知道TYPE、NAME、ARG、VALUE分別是什麽了:

技術分享圖片

typedef用來定義新類型:

技術分享圖片

更具體的例子如下:

技術分享圖片

別被空格欺騙了,在這個例子中,DEFINITION對應的是unsigned char,IDENTIFIER對應的是byte。

struct是由多種數據類型打包在一起形成的一個概念,它在C語言中會大量使用:

技術分享圖片

[VARIABLE_NAME]是可選項,除了幾個小場景之外,我一般選擇不使用它。它通常會像下面這樣和typedef組合使用:

技術分享圖片

最後,union會創建類似struct的東西,不過其中的元素會在內存中重疊。這個東西挺怪,不好懂,所以暫時就這樣記住就好了:

技術分享圖片

1.5 鼓勵的話

為每一項創建速記卡以後,先從名字那一面開始學習,再閱讀背面的描述和使用格式。在本習題的視頻中,我展示了如何用Anki高效地完成這項任務,不過你一樣可以用簡單的索引卡片來完成這件事情。

我註意到一些學生遇到這樣的背誦記憶任務會感覺不適或者害怕。我不確定這是為什麽,不過我還是鼓勵你無論如何去做這件事情,將它看成一個提高自己記憶方面和學習方面技能的一個機會。熟能生巧,做得越多,這件事對你就越容易。

如果感覺到不爽或者沮喪,這也是很正常的,別當回事兒。也許你花了15分鐘,然後心煩得不得了,感覺自己真失敗。這很正常,而且這並不意味著你就真的失敗了。堅持不懈,你就可以度過一開始的沮喪期,這個練習將教會你兩件事情。

  1. 你可以用記憶作為自我能力評估。要知道自己對一樣東西的掌握程度,沒有什麽比記憶測驗更靠譜的了。

  2. 克服困難的方法是一次攻克一點。編程是學習這一技巧的好方法,因為在編程中,你很容易就能將問題切分成小塊,然後有針對性地下手。將這當成一個機會,把大任務切成小任務,以此建立自信。

1.6 告誡的話

關於背誦記憶,我還有最後一句告誡的話。記住大量的知識點並不會自動讓你成為應用這些知識的高手。就算你背下整本ANSI C標準,你可能依然無法成為一個好程序員。我遇到過很多人,他們對於標準C語法幾乎無所不知,按理說也該是C語言專家了,但他們依然會寫出糟糕、古怪、充滿缺陷的代碼,有的甚至連代碼都寫不來。

不要把記憶知識點的能力和高質量完成任務的能力混為一談。要真正成為高手,你需要在不同的場合下應用這些知識點,直到你掌握它們的使用方法。本文剩下的部分將會助你做到這一點。



本文摘自《“笨辦法”學C語言》

技術分享圖片

《“笨辦法”學C語言》

[美] 澤德 A. 肖(Zed A. Shaw) 著

點擊封面購買紙書

本書會隨書附贈5個多小時充滿激情的視頻,這是一套完整的C語言視頻課程!

作者Zed A.Shaw為急於自我提高編程技能(不限語言)的C語言初學者構建了一套課程,只要跟著學,你會像迄今為止Zed教過的數百萬程序員一樣獲得成功!只要你能自律、投入和堅持! 本書內容十分淺顯易讀,只要花2天到1周可以讀完,讀完後既可以獲得幾千行代碼的C編程經驗。本書會讓你的每一分鐘投入都有回報。你很快能學會世界上強大的編程語言之一,成為一名C程序員。

本書是寫給學過編程語言的讀者的,本書有趣、簡單,並且講解方法獨特,讓讀者了解眾多C語言的基礎知識和C程序中常見的缺陷,在慢慢增強自己的技術能力的同時,深入了解怎樣破壞程序,以及怎樣讓代碼更安全。

小福利

關註【異步社區】服務號,轉發本文至朋友圈或 50 人以上微信群,截圖發送至異步社區服務號後臺,並在文章底下留言你學習C語言經驗,或者試讀本書感受,我們將選出3名讀者贈送《“笨辦法”學C語言》1本,趕快積極參與吧!
活動截止時間:2018年 5月3 日


技術分享圖片

在“異步社區”後臺回復“關註”,即可免費獲得2000門在線視頻課程;推薦朋友關註根據提示獲取贈書鏈接,免費得異步圖書一本。趕緊來參加哦!

掃一掃上方二維碼,回復“關註”參與活動!

閱讀原文,購買《“笨辦法”學C語言》

閱讀原文


記憶C語言運算符(文末福利)