原文:
http://www.codeproject.com/cpp/complex_declarations.asp
作者:Vikram A Punathambekar
介紹
曾經(jīng)碰到過(guò)讓你迷惑不解、類似于int * (* (*fp1) (int) ) [10];這樣的變量聲明嗎?本文將由易到難,一步一步教會(huì)你如何理解這種復(fù)雜的C/C++聲明:我們將從每天都能碰到的較簡(jiǎn)單的聲明入手,然后逐步加入const修飾符和typedef,還有函數(shù)指針,最后介紹一個(gè)能夠讓你準(zhǔn)確地理解任何C/C++聲明的“右左法則”。需要強(qiáng)調(diào)一下的是,復(fù)雜的C/C++聲明并不是好的編程風(fēng)格;我這里僅僅是教你如何去理解這些聲明。注意:為了保證能夠在同一行上顯示代碼和相關(guān)注釋,本文最好在至少1024x768分辨率的顯示器上閱讀。
基礎(chǔ)
讓我們從一個(gè)非常簡(jiǎn)單的例子開(kāi)始,如下:
int n;
這個(gè)應(yīng)該被理解為“declare n as an int”(n是一個(gè)int型的變量)。
接下去來(lái)看一下指針變量,如下:
int *p;
這個(gè)應(yīng)該被理解為“declare p as an int *”(p是一個(gè)int *型的變量),或者說(shuō)p是一個(gè)指向一個(gè)int型變量的指針。我想在這里展開(kāi)討論一下:我覺(jué)得在聲明一個(gè)指針(或引用)類型的變量時(shí),最好將*(或&)寫在緊靠變量之前,而不是緊跟基本類型之后。這樣可以避免一些理解上的誤區(qū),比如:
int* p,q;
第一眼看去,好像是p和q都是int*類型的,但事實(shí)上,只有p是一個(gè)指針,而q是一個(gè)最簡(jiǎn)單的int型變量。
我們還是繼續(xù)我們前面的話題,再來(lái)看一個(gè)指針的指針的例子:
char **argv;
理論上,對(duì)于指針的級(jí)數(shù)沒(méi)有限制,你可以定義一個(gè)浮點(diǎn)類型變量的指針的指針的指針的指針...
再來(lái)看如下的聲明:
int RollNum[30][4];
int (*p)[4]=RollNum;
int *q[5];
這里,p被聲明為一個(gè)指向一個(gè)4元素(int類型)數(shù)組的指針,而q被聲明為一個(gè)包含5個(gè)元素(int類型的指針)的數(shù)組。
另外,我們還可以在同一個(gè)聲明中混合實(shí)用*和&,如下:
int **p1; // p1 is a pointer to a pointer to an int.
int *&p2; // p2 is a reference to a pointer to an int.
int &*p3; // ERROR: Pointer to a reference is illegal.
int &&p4; // ERROR: Reference to a reference is illegal.
注:p1是一個(gè)int類型的指針的指針;p2是一個(gè)int類型的指針的引用;p3是一個(gè)int類型引用的指針(不合法。;p4是一個(gè)int類型引用的引用(不合法。。
計(jì)算機(jī)等級(jí)考試二級(jí)C++各章考點(diǎn)內(nèi)容摘要
希望與更多計(jì)算機(jī)等級(jí)考試的網(wǎng)友交流,請(qǐng)進(jìn)入計(jì)算機(jī)等級(jí)考試論壇
更多信息請(qǐng)?jiān)L問(wèn):考試吧計(jì)算機(jī)等級(jí)考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |