指向指標的指標(教材)

2021-06-06 16:28:44 字數 1615 閱讀 4969

8.7.3 指向指標的指標

指向指標的指標也稱為二級指標,它指向的是指標型的資料。定義指向指標的指標變數的格式為:

資料型別 **指標變數名稱;

下面通過乙個例項說明指向指標的指標變數的用法。

main()

;char **p;

p= parray;

printf("\n");

for(i=0;i<3;i++)

printf("%s ", *(p+i));

}程式執行的結果為:

how are you

變數的記憶體情況如圖(記憶體單元首位址為假設位址值)。說明:

(1)語句char **p;定義了乙個指向指標資料的指標變數,該指標資料為乙個指向char型變數或char型陣列的指標。

(2)指向指標資料的指標變數也是乙個變數,有自己的記憶體空間。它儲存的也是乙個指標值(指標的指標),是乙個unsigned int型數,在turboc下占用2個位元組的記憶體。

(3)語句p= parray;將指標陣列的首位址ffc0(即第乙個元素的指標)賦給p,p指向了指標陣列的首位址。

(4)*p的值為指標值ff10,即為parray[0]的值。

(5)p+1的值為指標值ffc2。因為*p為指標型,即unsigned int型,占用兩個位元組,根據指標的加法規則,p+1的值為ffc2。

上面的例子中p沒有發生變化。p是乙個變數,其值是可以變化的。下面的**中,每次p指向下乙個字元陣列的首位址,利用了p的自加列印字串的值:

main()

;char **p;

p= parray;

printf("\n");

for(i=0;i<3;i++,p++)

printf("%s ", *p);

}例 8-11 輸入若干字串,統計其中"china"字串出現的次數(使用指向指標的指標)。

程式可以使用malloc函式動態定義陣列:首先動態定義指標陣列,並讓指向指標的指標parray指向該陣列。然後在迴圈過程動態定義字元陣列,並將每個字元陣列的指標儲存在前面定義的指標陣列中。

統計"china"字串次數的方法很簡單,只要利用迴圈,用strcmp比較並累加即可。

統計過程結束後,先釋放每個字元陣列,再釋放指標陣列。注意這個過程不能顛倒,否則會丟失字元陣列指標的資訊。

char **definepointerarray (int n);

char *definechararray (int n);

void freepointerarray (char **p); 

void freechararray (char *p); 

main()

/*統計"china"字串的個數*/

for(i=0;i/*定義動態的指標陣列,返回指標陣列的首位址*/

char **definepointerarray (int n) 

/*定義動態的字元陣列,返回字元陣列的首位址*/

char *definechararray (int n) 

/*釋放動態指標陣列*/

void freepointerarray (char **p) 

/*釋放動態字元陣列*/

void freechararray (char *p) 

來自:

指向指標的指標

理解二級指標,關鍵是理解指標的儲存方式和意義。這裡以指向int型指標的指標為例,梳理一下二級指標在記憶體分配中 的奧妙.include using namespace std int main int p a int point p cout a a endl p p endl p p endl p...

指向指標的指標

這幾天我下意識地琢磨到底 錯了,今天猛然明白了他的想法,其實這個技術點我早已掌握,只是當時對問題未深入思考,把握得較模糊,一時沒洞察他的思路,疏忽了。問題大概是這樣的 寫乙個函式,將乙個二維陣列作乙個變換。void rotate array 開闢備份空間 根據變換要求將元素一一賦值 因為這個方法並不...

指向指標的指標

一 回顧指標概念 讓我們先回顧一下指標的概念吧!當我們程式如下申明變數 short int i char a short int pi 程式會在記憶體某位址空間上為各變數開闢空間,如下圖所示。圖中所示中可看出 i 變數在記憶體位址5的位置,佔兩個位元組。a變數在記憶體位址7的位置,佔乙個位元組。接下...