這個陣列宣告如下:
double beans[3][4];
宣告並初始化pbeans變數為指向double型別的指標
double* pbeans = &beans[0][0];
因為beans是二維陣列,所以想要利用下面的述句將位址存放到指標是不合法的:
double* pbeans = beans;
*******
這主要是型別問題。因為指標的型別是double*,但是在陣列的型別則是double[3][4]。而存放此陣列位址的指標型別則是double*[4]。在C++中,將陣列大小與其型別聯合,所以上面的述句想要合法,那指標需要宣告大小。
double (*pbeans)[4] = beans;
*******
其中的括號是需要的,因為括號將指標初始化指向beans,這樣才是合法的,否則你就變成是在宣告指標陣列。不過要注意這指標只能存放在於存放此為度之陣列。
我不太明白 * 夾起來的那段話
double*[4]這個型別是哪裡來的???
double*[3][4]的[3]跑到哪去了???
是省略不用還是不需要用...
又為何不能這樣寫double* pbeans = beans;
(我看不懂那段文字= =)
應該說~~~
這問題背後是double* pbeans = beans;原本的用意是要幹麻的
double (*pbeans)[4] = beans;這樣的寫法
.....>"<
算了~~我完全不知道那段文字再說什麼
有誰能夠位我解惑嗎?????
拜託拜託~~
2007-05-01 16:29:57 · 1 個解答 · 發問者 哈哈哈哈哈哈哈 3 in 電腦與網際網路 ➔ 程式設計
宣告一個陣列是 double beans[3][4];
但是,我們想用指標來指向陣列的內容,可以用下面這行來宣告指標:
double* pbeans = &beans[0][0];
如果想用其他的寫法,不可以寫成下面這行:
double* pbeans = beans; // 這行程式碼是錯誤的
想把上面錯誤的程式碼做修改,必須改成下面這行:
double (*pbeans)[4] = beans;
beans 是一個陣列,雖然陣列名稱 beans 本身指向起始位址,但是宣告時,不可以直接把陣列名稱 beans 指定給 * pbeans。
它的解決方法,是用 C++ 複雜的宣告方法…
double (*pbeans)[4] = beans;
* (pbeans+0)[0] 指向 beans[0][0]
* (pbeans+1)[4] 指向 beans[1][4]
* (pbeans+3)[4] 指向 beans[3][4] …依此類推
所以 [3] 這個部分就是由指標 pbeans 來處理。
2007-05-04 13:40:43 · answer #1 · answered by Big_John-tw 7 · 0⤊ 0⤋