将 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] 之类的东西(指向给定zyx=0 元素) 或&amp;(array3D[z][y][x])(指向元素xyz) 或*(array3D[z])(指向给定zy=0x=0 元素),然后都将是int * 类型。我建议写出你的数据是如何组织的。

当然,你也必须手动删除这个结构,如果你在产品中这样做,你应该小心处理好异常并且不要泄漏,但这是另一个话题。

【讨论】:

以上是关于将 3 维指针的第一个地址转换为单维指针有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个单维数组转换为一个多维数组 - PHP

如何将二维数组的一维分配给一个指针。

将向量地址转换为本机指针是不是安全?

在 C 语言中:我可以让两个不同类型的指针指向同一个地址吗?

PHP将单维数组转换为嵌套数组

Python Cookbook(第3版)中文版:15.12 将函数指针转换为可调用对象