陣列指標 指標陣列以及二位陣列

2022-03-06 16:42:53 字數 2178 閱讀 1364

*p[3]這個是乙個指標陣列,它所代表的意思是陣列中的每乙個元素都是乙個指標變數,

而(*p)[3],p是乙個指標變數,表示指向乙個含有3個整型元素的一維陣列。

view code

int

i,j;

int a[2][3]=; //

int *p[3] ; //

表示乙個陣列,陣列中的元素是指標型別,一共有三個元素

int (*q)[3]; //

是乙個指標,指向乙個含有三個int型的陣列(q+1)會跳三個陣列元素

//把第一行三個元素位址存放在p指標陣列中

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

p[i]=&a[0

][i];

//輸出指標陣列中位址所對應值

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

cout

<< *p[j]<

";//

輸出結果為:3,4,5

cout<

q=a;//

把陣列a開始位址賦給指向一維陣列q;

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

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

cout

<< *(*(q+i)+j)<

"; //

輸出陣列中元素

system(

"pause

");

嚴格的將,c++中沒有多維陣列,通常所指的多維陣列其實就是陣列的陣列,比如int arry[3][4];表示乙個長度為3的陣列,陣列中的每個元素是乙個長度為4的陣列。在使用多維陣列時,記住這一點有利於理解其應用。

下面來講講多維陣列與指標的關係。與普通陣列一樣,使用多維陣列時,實際上將其自動轉換為指向該陣列第乙個元素的指標。也就是說,陣列的名字是乙個指向該陣列中第乙個元素的指標,在一維陣列中,arry==&arry[0],這兩個位址是一樣的。在二維陣列中,陣列名稱指向第乙個元素,第乙個元素是乙個長度為4的陣列。我們定義乙個指向長度為4的陣列的指標 int (*p)[4],然後可以將二維陣列的首位址賦值給它,p=arry。這樣是可以進行賦值的。這裡同樣滿足arry==&arry[0]。

知道了二維陣列名字與指標的關係,那麼我們在進行二維陣列傳參的時候就會好理解很多,以前二維陣列傳參是一直讓人頭疼的問題。這裡我們還是將二維陣列名字作為實參來傳遞,在接受函式的形參中,我們只需要定義乙個指向具體長度為陣列的指標即可,比如我們這裡使用 int (*p)[4]來接受arry這樣的引數。下面給出**例項。

view code

#include#include

using

namespace

std;

//陣列名字是乙個指向陣列首元素的指標,這裡我們定義乙個指向陣列的指標來接受arry

//r表示二位陣列的行數,c表示二維陣列的列數。

void printarry(int (*arry)[4],int r,int

c) cout

<

}}void

main()

,,};

printarry(arry,

3,4);//

等價於printarry(&arry[0],3,4);

system("

pause");

}

上述乙個簡單的列印二維陣列的簡單例子,重點是二維陣列的傳參。

在上述示例中,形參必須指明這個arry指標是指向乙個長度為多少的陣列,如int (*arry)[4]必須指明為4,有一定的侷限性,那麼有沒有更好的方法呢。答案是有的。考慮到二維陣列在記憶體中佔據連續的空間這乙個特性,我們可以用以為陣列來表達二位陣列。將上述printarry方法進行改寫,改寫結果如下:

view code

#include#include

using

namespace

std;

//傳入陣列的指標,二維陣列的行數與列數

void printarry2(int *arry,int r,int

c) cout

<

}void

main()

,,,};

printarry2(&arry[0][0],4,4);//

傳入陣列中的第乙個陣列中的第乙個元素的位址

system(

"pause");

}

二位陣列與指標

include include using namespace std void disparry int a 2 3 int main void c是乙個指標,指向的元素int 3 即arr的行元素 int c 3 arr int p p int arr p指向arr 0 0 也可以說是arr 0...

二位陣列和指標(參考)

二維陣列和指標 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。我們知道,乙個二維陣列在計算機中儲存時,是按照先行後列的順序依次儲存的,當把每一行看作乙個整體,即視為乙個大的陣列元素時,這個儲存的二維陣列也就變成了乙個一維陣列了。而每個大陣列元素對應二維陣列...

C語言二位陣列

前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...