是誰(shuí)在死記硬背學(xué)編程屠升?
沒(méi)錯(cuò)潮改,是我!
記得剛開(kāi)始學(xué)編程那會(huì)兒腹暖,沒(méi)有任何計(jì)算機(jī)基礎(chǔ)汇在,編程語(yǔ)法大多靠背——C++語(yǔ)法,操作系統(tǒng)各項(xiàng)定義脏答,計(jì)算機(jī)網(wǎng)絡(luò)各種協(xié)議......
后來(lái)我發(fā)現(xiàn)糕殉,不只我一個(gè)人這樣學(xué)習(xí),身邊不少同學(xué)都是如此殖告,認(rèn)為學(xué)習(xí)一門(mén)編程語(yǔ)言最重要的就是掌握其語(yǔ)法糙麦。所以為了將語(yǔ)法爛熟于心,最直接的方法就是記憶丛肮。
我們記憶了什么是常量,什么是作用域魄缚,什么是多態(tài)......
看到這里你可能覺(jué)得我會(huì)說(shuō):編程語(yǔ)言不重要宝与,編程思維才是最重要的,那么問(wèn)題來(lái)了冶匹,到底什么才是編程思維呢习劫?我并不是來(lái)宣揚(yáng)這句編程屆名言的,因?yàn)樗贿m合一個(gè)初學(xué)者嚼隘,初學(xué)者可能既不知道什么是編程思維诽里,也對(duì)編程語(yǔ)言比較生疏。
我想分享的是:學(xué)習(xí)編程語(yǔ)言的語(yǔ)法確實(shí)很重要飞蛹,只有理解谤狡、熟悉了語(yǔ)法才能更好地應(yīng)用一門(mén)編程語(yǔ)言,所以我們?nèi)ケ痴b記憶編程語(yǔ)言的語(yǔ)法也是可以理解的卧檐,不過(guò)這可能不是最好的辦法墓懂。
光憑記憶語(yǔ)法,是很難學(xué)會(huì)編程的霉囚,反而是用這門(mén)編程語(yǔ)言一段時(shí)間之后再回過(guò)頭看看那些語(yǔ)法捕仔,說(shuō)不定突然就理解了。
其實(shí)編程語(yǔ)言的語(yǔ)法也是可以通過(guò)理解來(lái)學(xué)習(xí)的盈罐。
舉一個(gè)我大學(xué)時(shí)剛學(xué)C++時(shí)遇到的一個(gè)語(yǔ)法問(wèn)題:我們稱(chēng)它為const問(wèn)題榜跌。
可能有同學(xué)沒(méi)有學(xué)過(guò)C++,我簡(jiǎn)單解釋一下盅粪,const是一個(gè)C++的關(guān)鍵字钓葫,最常用來(lái)定義常量。譬如:
const int MAX_VAL = 23票顾;
const string SCHOOL_NAME = “Peking University” ;
那么我們把MAX_VAL稱(chēng)為整型常量瓤逼,把SCHOOL_NAME稱(chēng)為字符串常量笼吟,這些常量在其生命周期內(nèi)其值都不能被修改。
上面兩個(gè)語(yǔ)句是很好理解的霸旗,再看看下面的呢贷帮?
const int * p=&n;
int * const p;
const int *const p;
上面三個(gè)語(yǔ)句看起來(lái)就不是那么好理解了吧?我剛學(xué)習(xí)const語(yǔ)句的時(shí)候也被這些復(fù)雜的語(yǔ)句給難到了诱告,只能死記硬背撵枢,按順序,這三個(gè)語(yǔ)句分別是:
const int * p=&n; //指向整型常量的指針精居,它指向的值不能修改
int * const p; //指向整型的常量指針?锄禽,它不能再指向別的變量,但指向(變量)的值可以修改
const int *const p; //指向整型常量的常量指針靴姿,它既不能再指向別的常量沃但,指向的值也不能修改
很明顯,p是一個(gè)指針佛吓,并且指向常量宵晚,這兩點(diǎn)大家都能輕而易舉地看明白。難點(diǎn)就是const到底控制著誰(shuí)维雇,誰(shuí)不能被修改淤刃?
之前遇到這種問(wèn)題我也是死記硬背的,不過(guò)后來(lái)就慢慢地理解它了吱型,因?yàn)镃++作為一門(mén)流行了那么久逸贾,那么多人用的編程語(yǔ)言,這其中一定有它的設(shè)計(jì)哲學(xué)津滞。
問(wèn)題來(lái)了铝侵,如何去理解呢?
很簡(jiǎn)單触徐,const修飾誰(shuí)哟沫,誰(shuí)的值就不能變,這其實(shí)和英語(yǔ)中不同詞性單詞的位置排列一樣锌介。對(duì)于一個(gè)名詞嗜诀,我們找離它最近的const。
如下面飄紅的詞:
const?int?* p = &a;
int * const p?= &a;
第一個(gè)const修飾的是 int 孔祸,int指代的是整型變量隆敢,也就意味著,指針p指向的值是不能修改的崔慧,也就是a的值不能變拂蝎,但是p還可以指向別的變量,比如說(shuō)指向b惶室。
第二個(gè)const修飾的是p温自,p指代的是指針玄货,也就意味著這個(gè)指針不能被修改,因?yàn)橹羔樧兞看娴氖堑刂返棵冢簿褪钦f(shuō)p存了一個(gè)地址后就不能存其他地址了松捉,換句話說(shuō)就是它不能指向別的變量了,但是p指向的變量的值可以改變馆里。比如p指向a隘世,a原來(lái)等于1,現(xiàn)在我們可以把a(bǔ)的值改為2鸠踪,但是p在生命周期內(nèi)只能指向a丙者,不能指向b或者其他值。
那么const int *const p 就很好理解了营密,它指向的值不能修改械媒,也不能再指向別的變量。
感興趣的同學(xué)還可以用這個(gè)套路去理解一下 const this 指針评汰,看看是不是適用呢纷捞?
以上用一個(gè)小例子分享了一下如何去理解一門(mén)編程語(yǔ)言,其實(shí)可以通過(guò)理解學(xué)習(xí)編程的地方還有很多键俱,比如形參、實(shí)參世分、傳值编振、傳引用、函數(shù)指針臭埋、友元踪央、多態(tài)、重載等等等等瓢阴,大家都可以嘗試換種思路去理解畅蹂,很多知識(shí)點(diǎn)一下子就能明白啦。
我們需要記住荣恐,學(xué)習(xí)編程的出發(fā)點(diǎn)不是應(yīng)付考試液斜。
當(dāng)然,除了編程語(yǔ)言叠穆,很多其他的知識(shí)少漆,如軟件分層、設(shè)計(jì)模式硼被,都是水到渠成式的設(shè)計(jì)示损。
大家別忘了點(diǎn)個(gè)贊喲!
在學(xué)習(xí)python中有任何困難不懂的可以加入我的python交流學(xué)習(xí)QQ群:932749660嚷硫,多多交流問(wèn)題检访,互幫互助始鱼,群里有不錯(cuò)的學(xué)習(xí)教程和開(kāi)發(fā)工具。資源分享