解讀C++中復(fù)雜的C/C++聲明
怎么去學(xué)習(xí)和理解C和C++的復(fù)雜類型聲明,下面的文章就開始一步一步教會(huì)你如何理解這種復(fù)雜的C/C++聲明, 本文將對(duì)C/C++聲明的深刻含義進(jìn)行解說(shuō),并詳述C/C++聲明的使用方法與技巧
我們將從每天都能碰到的較簡(jiǎn)單的聲明入手,然后逐步加入const修飾符和typedef,還有函數(shù)指針,***介紹一個(gè)能夠讓你準(zhǔn)確地理解任何C/C++聲明的“右左法則”。 需要強(qiáng)調(diào)一下的是。
復(fù)雜的C/C++聲明并不是好的編程風(fēng)格;我這里僅僅是教你如何去理解這些聲明。注意:為了保證能夠在同一行上顯示代碼和相關(guān)注釋,本文***在至少1024x768分辨率的顯示器上閱讀。 讓我們從一個(gè)非常簡(jiǎn)單的例子開始,如下:
- const int n=5; int const m=10;
這個(gè)應(yīng)該被理解為“declare p as an int *”(p是一個(gè)int *型的變量),或者說(shuō)p是一個(gè)指向一個(gè)int型變量的指針。我想在這里展開討論一下:我覺(jué)得在聲明一個(gè)指針(或引用)類型的變量時(shí),***將*(或&)寫在緊靠變量之前,而不是緊跟基本類型之后。這樣可以避免一些理解上的誤區(qū),比如:
- #include <iostream.h>
- #include <string>
- int main()
- {
- string word;
- while ( cin >> word )
- cout << "word read is: " << word << '\n';
- cout << "ok: no more words to read: bye!\n";
- return 0;
- }
這里,p被聲明為一個(gè)指向一個(gè)4元素(int類型)數(shù)組的指針,而q被聲明為一個(gè)包含5個(gè)元素(int類型的指針)的數(shù)組。另外,我們還可以在同一個(gè)聲明中混合實(shí)用*和&,如下:
- const int n=5; int const m=10;
這里p被聲明為一個(gè)函數(shù)指針,這個(gè)函數(shù)帶一個(gè)char類型的參數(shù),并且有一個(gè)int類型的返回值。另外,帶有兩個(gè)float類型參數(shù)、返回值是char類型的指針的指針的函數(shù)指針可以聲明。
同樣,在C++中也是如此,如果你從學(xué)習(xí)C++一開始就抱著這種態(tài)度的話,那么即便等到面試的時(shí)候被問(wèn)到某個(gè)語(yǔ)言細(xì)節(jié)。你也可以胸有成竹的說(shuō)你雖然并不知道這個(gè)細(xì)節(jié),但在實(shí)際編碼中遇到相應(yīng)問(wèn)題的時(shí)候肯定會(huì)找到合適的參考資料并很快解決問(wèn)題(解決問(wèn)題,才是最終目的)。
當(dāng)然,更大的可能性是,你在平常編碼中已經(jīng)接觸過(guò)了最常見的那80%的陷阱和技巧了,由于你用的是實(shí)踐指導(dǎo)性的學(xué)習(xí)方式,所以你遇到的需要去學(xué)習(xí)的陷阱和技巧幾乎肯定都是常見場(chǎng)景下的。比沒(méi)頭蒼蠅似的逮住一本C/C++“經(jīng)典”就“細(xì)細(xì)研讀”的辦法要高效N倍,因?yàn)樵跊](méi)有實(shí)踐經(jīng)驗(yàn)的情況下,你很可能會(huì)認(rèn)為其中的每個(gè)技巧,每個(gè)陷阱,都是同樣概率發(fā)作的。
【編輯推薦】