3

配列が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

4 に答える 4

2

とにかく、それは良い習慣ではないと思います:

f((short (*)[2])a);
于 2012-11-28T12:38:26.657 に答える
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;
}

どのようなエラーメッセージが表示されますか?

于 2012-11-28T12:38:20.823 に答える
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;
}
于 2012-11-28T12:38:21.387 に答える
0

あなたはそれをこのような簡単な方法で達成します:

1次元配列を2次元配列に変換する

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];
}
于 2012-11-28T12:38:57.627 に答える