今天在寫遍歷二維陣列的時候,突然思考這個問題,原因在於作內層迴圈時,對指標和陣列理解不到位。
雖然一直都會也寫遍歷二維陣列,但是原先從沒有想過這個問題。(逃)
標頭檔案
#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 ...