二維數組指針
回答
int a[20][30]; // data as 2D array
int *ap[20]; // array of pointers
for (j = 0; j < 20; ++j)
ap[j] = a[j]; // convert array to pointers
// can now pass `ap` to function expecting `int **`...
@Daniel:謝謝 - 數組名稱的'i'使我的大腦混亂 - 現在已經修復。 – 2013-03-12 13:41:01
爲什麼會低調回答這個問題?有沒有人有一個更好的主意,使一個函數期待一個'int **'和'int [20] [30]'? – 2013-03-12 13:42:53
沒有更快的方法嗎? – oneat 2013-03-12 13:43:05
不能直接有int **
指針數組,就沒有任何意義。如果您要訪問的數組的內存塊,你可以使用:
int *p = (int *)i; // you can go to up (p + 20*30)
否則,你需要一個指向int[30]
陣列,即
int (*p)[30] = &i[0]; // points to first row
有了第一個,因爲中投,然後你可以定義:
int **p2 = &p;
你還可以用*(*p2 + n)
訪問陣列。您已經拋棄了數組維度,但只要您在指針計算中使用它們,它就全部有效,即*(*p2 + 35)
指的是第2行第6列(一行30,再加上下一個元素5)。這非常快,但是如果函數需要使用原始尺寸對數組進行操作,則這不起作用(因爲它不是指針數組)。
你不能改變int i[20][30]
到int **
除了手動檢查數據並構建它。
但是,有些東西可以幫助你,C++中的每個xD數組只是一個以某種複雜方式訪問成員的一維數組。
例子:
#define MaxX 20
#define MaxY 30
int i[MaxX][MaxY];
...
//When you write:
i[x][y] = something;
//It's actually been translate to:
i[x * MaxY + y] = something;
- 1. 二維數組和指針
- 2. 指針的二維數組
- 3. 指針二維數組
- 4. 指針二維數組
- 5. 二維數組上的指針
- 6. 通過指針的二維數組
- 7. C指針與二維數組
- 8. 將二維數組轉換爲指針
- 9. C:二維數組的指針
- 10. 指針指向二維數組的指針的迭代
- 11. 指向數組和二維數組c的指針c
- 12. 轉換指針到指針二維數組
- 13. 將二維數組轉換爲指針指針
- 14. 帶指針和常規指針的二維數組? (C語言)
- 15. 從函數返回指向二維數組的指針 - C++
- 16. 字符數組和二維數組指針問題
- 17. 堆分配一個二維數組(而不是指針數組)
- 18. 指針和多維數組
- 19. 閱讀指向一個類的二維數組指針
- 20. 指向二維數組
- 21. Typed二維指針陣列
- 22. 在C++中聲明指向二維數組的內部二維數組的指針
- 23. 如何使用指針填充隨機數的二維數組
- 24. C++。無法將二維數組指針傳入函數
- 25. 使用指針更新結構中的二維整數數組
- 26. C:使用二維數組和函數指針
- 27. 問題把字符指針放入二維數組的char指針
- 28. 指向一維數組的雙指針
- 29. 空指針異常 - 打印二維數組
- 30. 如何將指針分配給C中的二維數組?
最快的方法是不要。無論如何,爲什麼不使用'std :: array'呢? – Fanael 2013-03-12 13:37:56
添加函數原型 – uba 2013-03-12 13:40:13
二維數組根本沒有與指針所期望的指針相同的內存佈局。 – 2013-03-12 13:42:34