看板 C_and_CPP 關於我們 聯絡資訊
最近在網路上看到一篇動態配置二維陣列的方法… 我想這邊可能有很多人看過了…但是有一個地方看不太懂…所以想請問大家一下… 參考網址/文章來源: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
VictorTom:那一段要看怎樣用, 才知道會不會浪費.... 06/22 22:09
VictorTom:這樣做有一個好處是, 你用一個cast, 就可以把p當成二維 06/22 22:09
VictorTom:陣列來用, p~p+h這一段就相當於二維陣列每一個row的頭. 06/22 22:10
VictorTom:一般動態二維陣列要經過兩次new, 一次配char*[], 再一個 06/22 22:12
VictorTom:loop配char[]; 一維模擬二維, 自然有一個基底的char[], 06/22 22:12
VictorTom:然後還是得new一個char*[]跑迴圈一個一個指上去.... 06/22 22:13
VictorTom:它這樣寫法的好處就是, new跟delete只需要一次.... 06/22 22:13
VictorTom:它把char*[]需要的空間與char[]需要的空間一起new完了. 06/22 22:14
VictorTom:如果小弟上面廢話這麼多您還是不明白p~p+h的用途.... 06/22 22:14
VictorTom:建議您自己試著算算看, 要動態配置出char [h][w]的二維 06/22 22:15
VictorTom:陣列總共需要多少new來的空間, 這樣應該就會明白了:) 06/22 22:15
ychch:感謝你的解釋…雖然看不太懂…但我會在想看看@@ 06/22 22:32
snowlike:p+h使用在p[i]處,沒有浪費掉;拿掉就只是一維上的[h*w] 06/23 01:12