我假設如果你想訪問你的「2D陣列」作爲一個D矩陣,你期望當你增加索引1時,你訪問數組中的下一個元素(並且會自動進入下一個元素當你跑離邊緣時)。正確的做法是通過改變分配數組的方式。我會試着展示這是如何完成的 - 這只是C,而不是C++。無論如何,你可能更適合使用malloc
。我還以爲你在代碼中一個非常嚴重的錯誤,因爲你正在創建一個char *
指針p
,但指望用它在
p[x][y];
,而您將需要一個char **
,效果顯着。讓我們嘗試做的代碼,會做你想要什麼:
int sizes[100];
//init sizes
unsigned char *p[100]; // without the == sign we create an array of 100 pointers
unsigned char *bigP; // the master pointer
int totalLength = 0;
int ii;
for(ii=0; ii<100; ii++) totalLength += sizes[ii];
bigP = malloc(sizeof(char) * totalLength);
int offset = 0;
// make pointers p point to places along this big memory block:
for(ii = 0; ii < 100; ii++) {
p[ii] = bigP + offset;
offset += sizes[ii];
}
現在你可以用
p[x][y];
或
bigP[z];
解決您的數組,其中z
可以從0到元素的最大數量。當然,在這個過程中,你不知道(當你使用「1D」範例時)在鋸齒陣列的哪一行/哪一列 - 你無法知道,如果你真的在一個維度。
這裏的關鍵是內存被分配爲一個連續的塊,並且指針p
指向該塊中的位置。這意味着你不能免費獲得p
。你必須永遠免費bigP
。
我希望這是有道理的。
在我的數組中不是所有的都是相同的大小 – Blazer
如果你有一個「參差不齊的數組」(不同的長度),那麼嘗試使它成爲一個D數組是不可取的。你是如何創建它的? – Floris
我沒有其他選擇,長度必須不同,除了2d數組之外,此作業的速度更快? – Blazer