怎麼去學習和理解C和C++的復雜類型聲明,下面的文章就開始一步一步教會你如何理解這種復雜的C/C++聲明, 本文將對C/C++聲明的深刻含義進行解說,並詳述C/C++聲明的使用方法與技巧
我們將從每天都能碰到的較簡單的聲明入手,然後逐步加入const修飾符和typedef,還有函數指針,最後介紹一個能夠讓你准確地理解任何C/C++聲明的“右左法則”。 需要強調一下的是。
復雜的C/C++聲明並不是好的編程風格;我這裡僅僅是教你如何去理解這些聲明。注意:為了保證能夠在同一行上顯示代碼和相關注釋,本文最好在至少1024x768分辨率的顯示器上閱讀。 讓我們從一個非常簡單的例子開始,如下:
- const int n=5; int const m=10;
這個應該被理解為“declare p as an int *”p是一個int *型的變量),或者說p是一個指向一個int型變量的指針。我想在這裡展開討論一下:我覺得在聲明一個指針或引用)類型的變量時,最好將*或&)寫在緊靠變量之前,而不是緊跟基本類型之後。這樣可以避免一些理解上的誤區,比如:
- #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被聲明為一個指向一個4元素int類型)數組的指針,而q被聲明為一個包含5個元素int類型的指針)的數組。另外,我們還可以在同一個聲明中混合實用*和&,如下:
- const int n=5; int const m=10;
這裡p被聲明為一個函數指針,這個函數帶一個char類型的參數,並且有一個int類型的返回值。另外,帶有兩個float類型參數、返回值是char類型的指針的指針的函數指針可以聲明。
同樣,在C++中也是如此,如果你從學習C++一開始就抱著這種態度的話,那麼即便等到面試的時候被問到某個語言細節。你也可以胸有成竹的說你雖然並不知道這個細節,但在實際編碼中遇到相應問題的時候肯定會找到合適的參考資料並很快解決問題解決問題,才是最終目的)。
當然,更大的可能性是,你在平常編碼中已經接觸過了最常見的那80%的陷阱和技巧了,由於你用的是實踐指導性的學習方式,所以你遇到的需要去學習的陷阱和技巧幾乎肯定都是常見場景下的。比沒頭蒼蠅似的逮住一本C/C++“經典”就“細細研讀”的辦法要高效N倍,因為在沒有實踐經驗的情況下,你很可能會認為其中的每個技巧,每個陷阱,都是同樣概率發作的。