作者ychch (GG)
看板C_and_CPP
標題[問題] 另一種方式的動態配置二維陣列…
時間Mon Jun 22 21:47:16 2009
最近在網路上看到一篇動態配置二維陣列的方法…
我想這邊可能有很多人看過了…但是有一個地方看不太懂…所以想請問大家一下…
參考網址/文章來源:
http://smalldd.pixnet.net/blog/post/10953132
在配置的函式裡面的下面幾行
p = (void**)new char[h*sizeof(void*) + h*w*size];
for(i = 0; i < h; i++)
{
p[i] = ((char *)(p + h)) + i*w*size;
}
p[i]是從p+h的位址開始…而我的問題是為什麼不直接從p的位置當做p[i]…
也就是在new的時後…為什麼要多new h*sizeof(void*)這段空間…
我試過用BCB跑過上面的程式…的確p+h這一段是浪費掉了…一直想不透…
不知道有沒有高手能夠解釋一下…感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.113.65
1F:→ VictorTom:那一段要看怎樣用, 才知道會不會浪費.... 06/22 22:09
2F:→ VictorTom:這樣做有一個好處是, 你用一個cast, 就可以把p當成二維 06/22 22:09
3F:→ VictorTom:陣列來用, p~p+h這一段就相當於二維陣列每一個row的頭. 06/22 22:10
4F:→ VictorTom:一般動態二維陣列要經過兩次new, 一次配char*[], 再一個 06/22 22:12
5F:→ VictorTom:loop配char[]; 一維模擬二維, 自然有一個基底的char[], 06/22 22:12
6F:→ VictorTom:然後還是得new一個char*[]跑迴圈一個一個指上去.... 06/22 22:13
7F:→ VictorTom:它這樣寫法的好處就是, new跟delete只需要一次.... 06/22 22:13
8F:→ VictorTom:它把char*[]需要的空間與char[]需要的空間一起new完了. 06/22 22:14
9F:→ VictorTom:如果小弟上面廢話這麼多您還是不明白p~p+h的用途.... 06/22 22:14
10F:→ VictorTom:建議您自己試著算算看, 要動態配置出char [h][w]的二維 06/22 22:15
11F:→ VictorTom:陣列總共需要多少new來的空間, 這樣應該就會明白了:) 06/22 22:15
12F:→ ychch:感謝你的解釋…雖然看不太懂…但我會在想看看@@ 06/22 22:32
13F:推 snowlike:p+h使用在p[i]處,沒有浪費掉;拿掉就只是一維上的[h*w] 06/23 01:12