關於二維陣列位址和指標之間賦值的問題

2021-05-25 13:33:35 字數 2001 閱讀 8382

在開發工業乙太網專案的時候經常遇到一些小細節問題,在建立資料報進行傳輸的過程中傳遞txbuf緩衝區的位址的時候就遇到類似下面的問題。

一.簡單說明1

定義乙個

2x3的

int型的二維陣列

int array[2][3];

並且給這個二維陣列賦值

1,2,3,4,5,6

;array[0][0]=1

array[0][1]=2

array[0][2]=3

array[1][0]=4

array[1][1]=5

array[1][2]=6

輸出結果

123

456

array[0]

表示第一行的首位址,也就是第一行第乙個數的位址,也就是

&array[0][0]

soarray[0]==&array[0][0]

;其實&array[0]

還==array[0]==&array[0][0]

,都表示第一行的首位址。

array[1]

是第二行的首位址,也就是第二行第乙個數的位址,也就是

&array[1][0]

so array[1]=&array[1][0];

試試&array[1]

還==array[1]==&array[1][0]

定義乙個指標變數

int *p;

將第一行的首位址賦給p有

3種方式。

1.p=array[0]; 2.

p=&array[0]; 3.

p=&array[0][0];

p[0]

就等同於

array[0][0],

也就是p[0]==1;(

為了形象記憶,可以用替換的角度去記憶和理解。因為之前說過

p=array[0], so

,p[0]就把p

換成array[0]

再加上[0]

就是arary[0][0])

p[1]

等於array[0][1]等於2

p[2]

等於array[0][2]等於3

同理,將第二行的首位址賦給

p也有三種方式:

3.p=array[1];

4.p=&array[1];

5.p=&array[1][0];

p[0]

等於array[1][0]等於4

p[1]

等於array[1][1]等於5

p[2]

等於array[1][2]等於6

二.簡單說明2:

typedefintec_buft[3];

ec_buftec_txbuf[2];//ec_buftec_txbuf[2]

就等同於

int ec_txbuf[2][3];

三.具體例項

#include#includetypedef short ec_buft[3];

ec_buft ec_txbuf[2];

int main(void)

}printf("陣列中的值為/n");

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

printf("/n");

}printf("陣列的每個元素位址為/n");

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

printf("/n");

}for(int k=0;k<2;k++)

printf("/n");

for(int k=0;k<2;k++)

framep=ec_txbuf[1];

printf("/nframep=%x/n",framep);

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

printf("/n");

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

system("pause");

return 0;

}

四.執行結果:

二維陣列 二維陣列和指標

include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...

二維指標和二維陣列

二維指標和二維陣列有三種形式 1,type ptr 2,type ptr或者type prt 3,type prt 三種形式意思相近,也有區別。首先三種形式都能表示二維的資料結構。1,type ptr 表示乙個指向指標的指標 但是在一開始宣告的時候 type ptr ptr到底指向幾個指標是不知道的...

c 二維陣列賦值及二維指標使用

include void main int tmp 2 test printf value d n tmp 0 printf value d n tmp 0 printf value d n tmp 1 printf value d n tmp 1 printf value d n tmp 0 1 ...