[討論] c++二維陣列的配置

看板C_and_CPP (C/C++)作者 (破執)時間12年前 (2014/01/27 15:36), 編輯推噓4(4013)
留言17則, 6人參與, 最新討論串1/2 (看更多)
請問大家關於二維陣列 我的觀念是二維陣列除了資料的空間以外 還要包含一維陣列的pointer之空間 所以寫了以下的code來配置 不過好像會有錯,不知道什麼原因? 不知可否請各位大大解惑? int** arr2; arr2 = (int **)new int[m+m*n]; for(int i=0;i<m;i++){ arr2[i] = (int*)(arr2+n*i); }//end for -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.56.66

01/27 15:56, , 1F
1. new int 那列, 不建議假設 int* 和 int 大小相同.
01/27 15:56, 1F

01/27 15:57, , 2F
2. arr2[i] = (int*)(arr2+n*i); 至少後面應為 (arr2+m+n*i);
01/27 15:57, 2F

01/27 16:00, , 3F
二維陣列看幾個元素,空間就多大,沒什麼一維陣列指標空間
01/27 16:00, 3F

01/27 16:00, , 4F
建議還是先 arr2 = new int*[m]; 再 arr2[0] = new int[m*n];
01/27 16:00, 4F

01/27 16:01, , 5F
再跑廻圈建立 arr2[i] 的指向.
01/27 16:01, 5F

01/27 16:02, , 6F
點線面,二維是ㄧ維的集合,三維是二維的集合。
01/27 16:02, 6F

01/27 16:03, , 7F
這樣可以嗎:arr2 = new int*[m+m*n];
01/27 16:03, 7F

01/27 16:09, , 8F
不行
01/27 16:09, 8F

01/27 16:40, , 9F
感謝yvb,改成(arr2+m+n*i),這邊知道假設pointer和int
01/27 16:40, 9F

01/27 16:40, , 10F
一樣大不太好,不過想要測試一下,所以至少知道自己觀
01/27 16:40, 10F

01/27 16:42, , 11F
念不太對,一維陣列的pointer是先放在前面,所以才要+m
01/27 16:42, 11F

01/27 16:48, , 12F
這不只是不好的問題,硬要的話用 char 配置
01/27 16:48, 12F

01/27 16:50, , 13F
再用 placement new
01/27 16:50, 13F

01/28 12:12, , 14F
想請問二維陣列與int**的差別就是在那個+h的地方嗎?
01/28 12:12, 14F

01/28 12:12, , 15F
int** 動態配置時會將一維指標放在前面
01/28 12:12, 15F

01/28 12:13, , 16F
可是int[][] 因為有array的標示所以不需要那些一維指
01/28 12:13, 16F

01/28 12:13, , 17F
標嗎?
01/28 12:13, 17F
文章代碼(AID): #1IvWnXGQ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IvWnXGQ (C_and_CPP)