将 3 维指针的第一个地址转换为单维指针有问题吗?
Posted
技术标签:
【中文标题】将 3 维指针的第一个地址转换为单维指针有问题吗?【英文标题】:Problem in getting the first address of a 3 dimensional pointer into a single dimensional pointer? 【发布时间】:2011-04-16 11:32:34 【问题描述】:可以使一维数组指向一个三维数组的首地址,
例如
int *array;
int ***array3D;
array=*array3D;
我需要第一个数组指向第二个数组的第一个地址。
我只需要指针的第一个地址。谁能建议任何替代方案来指向起始地址?提前致谢。
【问题讨论】:
需要格式化代码重新贴一下。你也不能取消引用void*
。举例说明任何其他数据类型。
@iammilind:但你可以取消引用void **
或void ***
。
是要指向第一个元素的地址(即指向指针),还是指向第一个元素本身?
这个***.com/questions/62512/… 相关问题可能会为您提供一些见解
【参考方案1】:
当您处理 2D 和 3D 图像时,这种事情总是会发生。
您写的 (array = *array3D
) 显然不会编译,因为类型不匹配。 array3D
是 **int
,数组是 *int
。
如果您正确设置了array3D
,例如(例如):
int ***array3D = new int **[zsize];
for(int z = 0 ; z < zsize ; ++z)
array3D[z] = new int *[ysize];
for(int y = 0 ; y < ysize ; ++y)
array3D[z][y] = new int [xsize];
然后您可以访问诸如array3D[z][y]
之类的东西(指向给定z
和y
的x=0
元素)
或&(array3D[z][y][x])
(指向元素x
、y
、z
)
或*(array3D[z])
(指向给定z
的y=0
和x=0
元素),然后都将是int *
类型。我建议写出你的数据是如何组织的。
当然,你也必须手动删除这个结构,如果你在产品中这样做,你应该小心处理好异常并且不要泄漏,但这是另一个话题。
【讨论】:
以上是关于将 3 维指针的第一个地址转换为单维指针有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章