二維數組指針
回答
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. 二維數組指針C
- 4. 指針的二維數組
- 5. 二維數組指針
- 6. 指針二維數組
- 7. 指向二維數組的指針
- 8. 二維數組的C指針算術
- 9. 將二維數組轉換爲指針
- 10. 通過指針的二維數組
- 11. C指針與二維數組
- 12. C:二維數組的指針
- 13. C++指針到二維數組
- 14. 轉換指針二維數組
- 15. C++指針和二維數組輸出
- 16. 二維數組上的指針
- 17. 使用指針填充二維數組
- 18. 雙指針實驗二維數組
- 19. 指針指向二維數組的指針的迭代
- 20. 作爲輸入參數的指針(二維數組)的指針
- 21. 二維數組作爲指針的一維數組
- 22. 指向數組和二維數組c的指針c
- 23. 二維數組和指針的指針從過去的考卷
- 24. 從二維數組打印字符串使用指針指針
- 25. 將二維數組轉換爲指針指針
- 26. 轉換指針到指針二維數組
- 27. 帶指針和常規指針的二維數組? (C語言)
- 28. 從函數返回指向二維數組的指針 - C++
- 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