【问题标题】:How to reshape c-style arrays如何重塑 c 风格的数组
【发布时间】:2014-01-24 09:39:31
【问题描述】:

例如,我有一个包含 20 个元素的 1 维数组,我想将其重塑为 4x5 数组,因此,我可以将其传递给具有如下签名的函数。 . . .

void func(type** inArray, int xDimension, int yDimension)

我想挤进myArray 的数据是type* 类型的。为了重塑阵列,我需要做什么?我不想分配一个新数组并使用循环来填充新数组。有什么方法可以将数据转换到位?

我得到的最接近的是这样的。 .

float one[20];
float* two[] = {one, one+5, one+10, one+15};
func( two, 4, 5);

【问题讨论】:

  • @moeCake 这个解决方案有多远?您应该已经知道 4x5 与 1x20 的数组大小相同。那么这在多大程度上改变了秩序?!
  • 不,您不能将其投射到位。您必须在某处分配一个指针数组,例如在您的示例中,然后填充它。您可以编写一个函数来填充现有数组(必须具有正确的大小),或者编写一个函数到malloc() 并填充一个新数组。

标签: c arrays


【解决方案1】:
void func(type** myArray, int xDimension, int yDimension, type* oneDArray)
{
    int i,j,index=0;
    for(i=0;i<yDimension;i++)
    {
         for(j=0;j<xDimension;j++)
         {
             myArray[i][j]= oneDArray[index++];
         }
    }
}

【讨论】:

  • 谢谢,但这只是用一维数组的内容填充现有的二维数组。我不想生成第二个数组并复制数据,而是重新索引现有数据
  • 你想如何重新索引它?如果您通过虚拟矩阵举例说明它会很合适......
  • @zeeshanmughal 你不必做所有这些循环只需memmove(&amp;myArray[0[0],oneDArray,xDimension*yDimension*sizeof(type));
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2017-11-11
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多