int (*ptr)[2] 是啥?

強大的指標

剛剛被這個問題困了一小段時間,簡單的來說,(*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]。

嗯,真是複雜又有趣的指標!