[轉錄]C/C++ 的多維動態陣列 - Amin's Note - 痞客邦

文章推薦指數: 80 %
投票人數:10人

Array[i]=pData;. 注意到嗎?這次只用了二次的malloc。

當要release memory也只要free Array[ ... 關閉廣告 Amin'sNote 跳到主文 阿民的生活筆記 部落格全站分類:數位生活 相簿 部落格 留言 名片 Aug20Mon200720:21 [轉錄]C/C++的多維動態陣列 http://ehome.hifly.to/showthread.php?threadid=357 多維動態陣列在C中大概只能用malloc,但這在一維時尚不構成問題,但需要多維陣列時怎麼辦呢?這算是程式論壇最常被問到的問題之一了。

我把它整理了相關的回覆,都只用二維做說明,更多維的陣列類推即可。

就從C談起吧!動態產生一個[m][n]陣列Array的方法 code:inti;int**Array;Array=(int**)malloc(m*sizeof(void*));for(i=0;iintArray[][]=newint[10][20];//這樣行ㄇ?當然不行!intArray[][]不是一個指標,而且只能有一維為不定大小。

《小班》終於會從1數到100了?>那...?>int*Array[]=newint[10][20];//這樣行ㄇ?有點想法了!但可惜的是'*'在C++的語法是修飾前面的識別字,所以int*Array[]的意思是"Array是一個int指標的一維陣列!"如果能使那個'*'以獨立指標型態去宣告Array,就會變成"Array是一個指標,指向一維int的陣列",而我們知道指標本身就可以當做一維的陣列,那麼是不是就成了"Array是一個二維的int陣列"?對了!這正是我們要的!問題是怎麼讓'*'成為獨立指標型態,不會去修飾前面的int識別字?答案是使用括號:int(*Array)[20]=newint[10][20];//這是正解!但問題又來了,new運算子可以使用newint[m][n],但int(*Array)[20]的[20]卻沒辦法以[n]來取代,所以就沒辦法做到不定大小的宣告了。

所以這只能算是小班的答案,要做到不定大小的動態多維宣告,加上STL的運用,是不錯的想法。

《中班》vector模板的運用vector*array=newvector[m];for(inti=0;i*Array=newvector(n);//這不是預留了n個元素的陣列了嗎?只可惜,這是一維的宣告,若你嘗試做這樣的宣告:vector*Array=newvector[m](n);編譯器會給你無情的嘲諷:陣列不能呼叫帶參數的建構子!這是很令人失望的!為十麼不行?不是邏輯的問題,或許下一版本的C++會可以這樣宣告吧!但為今之計只能自力救濟了。

《大班》使用模板在模版中仔細觀察下面的宣告:vector>Array(m,vector(n));不用懷疑!這是相當於宣告一個動態二維不定大小的intArray[m][n];不相信的話你可以在m,n範圍內存取Array[i][j]看看。

若你能一眼看出這是在幹嘛,那麼你早已超出大班的程度了!若你暫時不知所云,也沒關係,你可以安全的使用它帶給你的好處。

只是你也只好留在大班留班查看了^_^解釋這個宣告,其實不難,但首先你要對模版的使用有相當的了解,當然還要對vector模版的建構子不能陌生。

這樣子自然很容易可以看得懂它。

了然於胸了嗎?恭喜你,大班可以畢業了^_@註:大班的答案是Duncan在練功房提出的解答,注意到兩個兩個角括號中間的空白了嗎?(> >)               ^-------這裡要有空白不加空白的話會被語法解析為右移運算子。

全站熱搜 創作者介紹 Aminzai Amin'sNote Aminzai發表在痞客邦留言(2)人氣() E-mail轉寄 全站分類:數位生活個人分類:Coding此分類上一篇:[轉錄]JavaME應用設計指南之聯網重定向 此分類下一篇:給學弟妹看的Code::Blocks工具安裝法 上一篇:PlaytheBasssssssssssssssssss 下一篇:好久沒寫網誌 歷史上的今天 2007:PlaytheBasssssssssssssssssss ▲top 留言列表 發表留言 新聞交換(RSS) 參觀人氣 本日人氣: 累積人氣: 網誌搜尋 近期文章 熱門文章 最新迴響 文章分類 CSIE(1) 專題(10) 心情類(2) 心情沒上鎖類(150)心情上鎖類(0) Computer(7) Software(15)Linux(88)Computerlike(35)Coding(35)Latex(5)Android(2)VIM(1) Other(1) 其他(29) Video(2) JustForFun(6)MV(33) 誰來我家 最新站方公告 [公告]2022年度農曆春節期間服務公告[公告]MIB廣告分潤計劃、PIXwallet錢包帳戶條款異動通知[公告]2021年度農曆春節期間服務公告 POWEREDBY (登入) 這只是我用來紀錄生活,學習的一個小天地.... 如果有任何需要的資料請自取....如自創之文件請留轉載位置.... 回到頁首 回到主文 免費註冊 客服中心 痞客邦首頁 ©2003-2022PIXNET 關閉視窗



請為這篇文章評分?