在開發工業乙太網專案的時候經常遇到一些小細節問題,在建立資料報進行傳輸的過程中傳遞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 ...