二维数组指针
回答
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