強大的指標
剛剛被這個問題困了一小段時間,簡單的來說,(*ptr)[2]可以把它當作是一個二維陣列,也就是:
int (*ptr)[2] = new int[10][2]; // 一個int [10][2]的二維陣列
以下做個測試,先把元素add進去以及print出來:
for (int i = 0; i < 10; ++i) { for (int j = 0; j < 2; ++j) { ptr[i][j] = ++count; std::cout << "(" << ptr[i][j] << ")" << &(ptr[i][j]) << " "; } printf("\n"); }
要取出來當然就很簡單的:
ptr[5][0]
比較特別的取法:
(*ptr + 5)[3]
這個表示說,從原本先從第一個元素(ptr[0][0])開始,先往後5個位置當作新的起始點,再從新的起始點往後算3個位置,所以答案是9,也就是ptr[4][0]。
另一種取法:
(*(ptr + 5))[3]
代表從ptr[0[0]]開始往下數5個row,也就變成ptr[5][0],再往下算3個位置,所以答案就是14,也就是ptr[5][1]。
嗯,真是複雜又有趣的指標!