多維陣列與指標

2021-07-13 07:27:22 字數 1790 閱讀 3079

今天在寫遍歷二維陣列的時候,突然思考這個問題,原因在於作內層迴圈時,對指標和陣列理解不到位。

雖然一直都會也寫遍歷二維陣列,但是原先從沒有想過這個問題。(逃)

標頭檔案

#ifndef treble_h

#define treble_h

#includetypedef int int_array[3];

void displayarray1(int(&a)[2][3]);

void displayarray2(int(*a)[3]);

void displayarray3(int_array *a);

#endif // !treble_h

定義

#include"trebleway.h"

void displayarray1(int (&a)[2][3])

std::cout << std::endl; }}

void displayarray2(int(*a)[3])

std::cout << std::endl; }}

void displayarray3(int_array *a)

std::cout << std::endl;

}}

主函式

#include "trebleway.h"

int main()

, };

std::cout << "use displayarray1" << std::endl;

displayarray1(a);

std::cout << "use displayarray2" << std::endl;

displayarray2(a);

std::cout << "use displayarray3" << std::endl;

displayarray3(a);

system("pause");

return 0;

}

內層迴圈的變數需要定義成指標,是因為此時的內層變數是乙個包含3個元素的陣列,但是正如題目所說,此時陣列名,會變成指向第乙個元素的指標。

所以內層變數需要定義成乙個指向整型變數的指標,

int *paa = *pa
之前我有個錯誤理解,是今天突然出現的,之前沒想過。這裡為什麼不是int*paa=pa;奇怪的覺著把pa看做成立陣列名,認為這裡用pa是乙個指向int 型的指標。

但實際上,pa還是指向乙個三個變數的陣列的指標。

所以實際上(*pa),才是陣列,「相當於」陣列名;

然後根據陣列名會被當做指向陣列第乙個元素的指標,*pa被認為是乙個指向整型變數的指標。

int *paa = &((*pa)[0])
等同於上面這條**。

2016.8.7更新

int a[2][3]=;

int (*pa)[3]=&a[1];//pa 實際上存放的是a[1][0]的位址,但是要注意啊&a[1][0]雖然是乙個元素的位址

//但是pa本身是有型別的,是乙個指向含有三個元素的陣列的指標

int *p1=pa;//error:pa和p1的型別不符,即使存放的位址對於p1來說是正確的,

//但這裡本質上還是變數的操作,要滿足型別相符

int *p2=*pa;//pa被解引用成陣列,但是陣列在只出現陣列名字的地方被認為是指向第乙個元素的指標,

//,即乙個int指標,兩邊的型別相同。

多維陣列與指標

用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素,但在概念和使用上,多維陣列的指標比一維陣列的指標要複雜一些。可以認為二維陣列是陣列的陣列。例 定義 int a 3 4 則二維陣列a是由3個一維陣列所組成的,設二維陣列的首行首位址為2000,表示形式 含義位址 a二維陣列名,指向一維陣...

多維陣列與指標

用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素,但在概念和使用上,多維陣列的指標比一維陣列的指標要複雜一些。可以認為二維陣列是陣列的陣列。例 定義 int a 3 4 則二維陣列a是由3個一維陣列所組成的,設二維陣列的首行首位址為2000,表示形式 含義位址 a二維陣列名,指向一維陣...

指標與多維陣列小結

陣列 宣告 define size 10 int ch int get 10 int me size 表示方法ch 1 1 ch ch 0 ch 1 ch 1 get m n get m n int pz n pz m n get m n 復合標量 int 在宣告時同時使用陣列處理 include ...