由於工作需要轉成了C#,好久沒有學C++了,之前學了一段時間的C++,也寫過兩篇,放在博客園裡的,現在有專門的C++博客,以後就在這裡寫了。以下是前兩篇的地址
C++之父力作學習筆記1 C++之父力作學習筆記
今天來簡單說一下指針,可以說指針是一個難點,是一把雙刃劍,也許高手才能運用自如,像我這樣的菜鳥就會傷到自己。呵呵,廢話少說。
指針:對類型T,T*是“到T的指針”,也就是說,一個類型為T*的變量能保存一個類型T的對象的地址。例如: char c='a';
char *p=&c;//p保存著c的地址
用圖表示是:
這些都挺容易理解的,不幸的是,到數組的指針和到函數的指針需要更復雜的記法: int* pi; //到int的指針
char** ppc; //到字符的指針的指針
int* ap[10]; //10個到int的指針的數組
int (*fp)(char*); //到函數的指針,這種函數以char*為參數,返回int
int* f(char*); //有一個char*參數的函數,返回一個到ini的指針
對指針的基本操作是間接引用,也就是說引用被指針所指的那個對象。這一操作也被稱作間接(indirectionn)。間接運算符是(前綴的)一元*。例如 char c='a';
char* p=&c; //p保存著c的地址
char c2=*p; //c2=='a'被p所指的變量是c,而c中所存的值是'a'。所以由*p賦給c2的值就是'a'.
注意:這裡解釋一下 間接運算符是(前綴的)一元*。這就要扯到聲明的結構了。
一個聲明由四個部分組成:一個可選的“描述符”,一個基礎類型,一個聲明符,還有一個可選的初始式。除了函數和名字空間之外,其他聲明都應該由分號結束。例如: char* kings[]={"Antigonus","Seleucus","Ptolemy"};這裡的基礎類型是char,聲明符是*kings[],而初始化是={...}。
描述符是一個開始關鍵字,例如:virtual和extern,它們說明了被聲明事物的某些非類型的屬性。
聲明符由一個名字和可選的若干聲明運算符組成。最常用的聲明運算符是
* 指針 前綴
*const 常量指針 前綴
& 引用 前綴
[] 數組 後綴
() 函數 後綴