二維(及高維)陣列指標意義和使用

2021-05-26 03:18:18 字數 1100 閱讀 1337

以前以為陣列很簡單,現在發現原來是自己很膚淺,昨天寫了一段**總是越界一晚上也沒搞清楚是怎麼回事,現在才發現是在對二維陣列的指標引用上出錯了,下面是目前發現幾種形式:

1. 首先靜態二維陣列如何作為引數傳入函式形式:

void myfunc(char stoken[100])

或 void myfunc(char (*stoken)[100])

是等價的!

2.靜態二維陣列元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j), 它們都與a[i][j]等價, 或者還可寫成(*(a+i))[j]。

此時注意(*a+i)[j]和(*(a+i)[j])與前面表示的不同之處(陣列其實就是指標,上次在csdn上寫的那個).

3.下面是一段測試**

void main(),,};

//decompose(array, 3);

double (*ptr)[3] = array;

//ptr是(*)型別的指標,它儲存的是陣列第一維(即每一行)的首位址,它的每一次遞增增加的位址數都是3個double型別的位元組數

ptr = &array[1];

//ptr中的內容其實是乙個型別的指標,即陣列第二維(即特定某一行)的首位址,它的每一次遞增增加的是1個double型別的位元組數

//同時注意的優先順序高於*(解引用dereference)的優先順序

cout << (*(ptr+1)[1]) << endl;

cout << (*(ptr+1))[1] << endl;

cout << *(*(ptr + 1)+1) << endl;

cout << (*ptr + 1)[1] << endl;

}輸出結果分別為,越界值、-0.2、-0.2-0.3。可以根據上面和注釋中所解釋的推測出來。

4.高維陣列的定義應該是從最後一維進行遞迴定義的,或者從第一維開始一步步巢狀定義。

高維陣列的指標其實就是多層指標,從最外面一層(*)--->(*)--->,每一層的指標型別是不相同的,每一層的指標遞增的時候+1之後增加的位元組數是不相同的。

比如:三維陣列的指標定義為 int (*p)[m][n],三維陣列定義為int a=,{},{}},,{},{}},,{},{}}};

二維陣列 二維陣列和指標

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 ...