多級指針

多級指針

當指針變數pp所指的變數Ip也是一種指針時,pp是一種指向指針的指針,稱指針變數pp是一種多級指針。(以常用的二級指針為例) 二級指針類型實際上是(一級)指針變數的地址。

定義和變數定義

設有基類型為int的指針變數p定義如下:

int *p,n;

變數p的類型為int*,指針變數p可存貯一個int類型變數(例如n)的地址:

p=&n; /* n的地址存貯到指針p中,即,使p指向n */

記p的類型(int*)為T,即,p是T類型的變數。

可使用基本運算(&)

&p

來計算指針變數p的地址。上面基本運算的結果是T* 類型的,即,是

T* ≡ (int*)* ≡ int**

類型的,即是基類型為int的指針變數的地址,是基類型為int的二級指針。

若要把上面的計算結果存貯到一個變數中,我們需要定義一個T*類型的

指針變數,例如q:

T *q; ≡ (int*)*q; ≡ int **q;

變數q被稱為基類型為int的二級指針變數。

下面的處理使q指向p:

q=&p;

下圖描述了int類型變數n、基類型為int的一級指針p、基類型為int的

二級指針q之間的關係:

多級指針(點擊看原圖) 多級指針(點擊看原圖)

一般地,K級指針變數的地址是K+1級指針類型的。實用上,二級指針的使用 最為廣泛,三級以上的指針很少使用。

多級指針的套用

(1) 使二級指針指向指針數組的元素,並通過二級指針指出指針數組中的元素。

設p是一個基類型為T的指針數組,q是一個基類型為T的二級指針

T *p[N],**q; (N是一個正整數常量)

語句

for(q=p,k=0;k<N;++k,++q)

{ /* *q按順序方式指出指針數組p中一個元素(基類型為T的指針)*/ }

(2)通過二級指針類型的參數,向外傳遞一個指針類型的結果。

當函式通過參數向外傳遞一個T類型的計算結果時,該參數的類型應為

T*的。當類型T是某種指針類型時,該參數的類型則應是二級指針類型的。

(3)向函式傳遞一個列數固定的二維數組。

學習要點

理解多級指針的概念,掌握多級指針變數定義的方法。

理解並能使用多級指針數組進行數據處理。

參考例子

如果指針變數中保存的是另一個指針變數的地址,這樣的指針變數稱多級指針。如果對一級指; 針熟練掌握其基本原理,分析多級指針變數所表示的含義也就不困難了。例如:

#include <iostream.h>

void main()

{

int a= 5;

int *b=&a;

int ** c = &b;

cout<< **c << endl;

**c =10;

cout <<"a=" <<"**c=" <<**c;

}

程式中c稱為多級指針(二級指針),在這個語句執行完之後,a,b,c之間的關係是:

變數c -------------> 變數b -------------> 變數a

或表示為 “ c---->*---->*--->int

即c是一個指針,該指針指向一個指向int類型變數的指針變數。

分析* c和**c的類型:

c----->*----->*------> int

* c----> * ----> int **c----->int

表達式**c引用到一個基本數據類型的變數,這是程式設計師想細緻了解的變數,而象c和*c的值, 因為它們是指針,程式設計師所關心的只是使用指針運算建立和修改它們之間的聯繫(指向……)。 在上面給出的程式中,語句

**c=10;

pa---> [2] ----> * --->int

即pa是有兩個元素的數組,每個元素是個指向int類型的指針。而pc為 :

pc---> [5] ----> [7] ---> * ---> char

例:

#include <iostream.h>

void main()

{

int a[2][3]={2,4,6,8,10,12};

int *p[2];

p[0]=a[0];

p[1]=a[1];

for(int i=0:i<2;i++)

for (int j=0;j<3; j++, p[i]++)

cout << "a[" << i << "][" << j << "]=" << *p[i] <<endl;}

運行結果:

a[0][0]=2

a[0][1]=4

a[0][2]=6

a[1][0]=8

a[1][1]=10

a[0][2]=12

相關詞條

相關搜尋

熱門詞條

聯絡我們