如何将数组[4]转换为数组[2] [2]?

时间:2012-11-28 12:24:07

标签: c arrays casting

我有一个数组short frame[4],我希望它作为函数参数short frame[2][2]

我该如何施展它?我尝试了不同的东西(比如*(short [2][2])&frame[0]*),但我仍然收到错误消息。

如果我用void function(short frame[2][2])声明该函数,也无效 并使用function(&frame[0])调用该函数,frameshort frame[4];

4 个答案:

答案 0 :(得分:2)

无论如何,我认为这不是一个好习惯:

f((short (*)[2])a);

答案 1 :(得分:1)

这可以在这里工作,虽然有警告。

#include <stdio.h>
void function(short frame[2][2])
{
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
      printf("%d ", frame[i][j]);
  printf("\n");
}
int main()
{
  short frame[4] = { 0, 1, 2, 3 };
  function(&frame[0]);
  return 0;
}

您收到了什么错误消息?

答案 2 :(得分:0)

您不能在不同的维数组之间进行转换。

它不知道你想要它的方向。

你必须写一个函数。

在伪代码中:

function castArray(short[4] input){
   short[2][2] output = new short[2][2];
   output[0][0] = input[0];
   output[0][1] = input[1];
   output[1][0] = input[2];
   output[1][1] = input[3];
   return output;
}

答案 3 :(得分:0)

你可以通过以下方式轻松实现:

将1-D阵列转换为2-D阵列

short frame[MAX];
short dup_frame[ROW][COL];
int i,j,k;
for(i = 0 ; i < MAX ; i++)
{
  j= i / ROW ;  // you can do it by i / COL also 
  k= i % ROW ; // you can do it by i % COL also 
  dup_frame[j][k] = frame[i];
}