0

ポインターは常に C プログラミングで私を取得します。

構造体の配列へのポインターを関数に渡して、構造体を変更し、後で他の関数で使用できるように配列のメンバーを渡したいと思っています。問題は、配列にインデックスを付けて変更された構造体を指すと思うと、後でメンバーを調べようとすると、変更された値ではありません。これが私のコードの一部です

typedef struct
{
  int rows;
  int columns;
  int *data;
} Mat;

int main(void)
{
  Mat result, decoded_result;
  int result_data[8] =
  { 0, 0, 0, 0, 0, 0, 0, 0 };
  int decoded_data[4] =
  { 0, 0, 0, 0 };
  result.columns = 1;
  result.rows = 8;
  result.data = &result_data[0];
  decoded_result.columns = 1;
  decoded_result.rows = 4;
  decoded_result.data = &decoded_data[0];

  Mat m1, m2, m3, m4, m5;
  m1.rows = m2.rows = m3.rows = m4.rows = m5.rows = 4;
  m1.columns = m2.columns = m3.columns = m4.columns = m5.columns = 1;

  int md1[4], md2[4], md3[4], md4[4], md5[4];

  m1.data = &md1[0], m2.data = &md2[0], m3.data = &md3[0], m4.data = &md4[0], m5.data =
      &md5[0];

  Mat mat_array[10] =
  { m1, m2, m3, m4, m5 };

  decode_data(&result, &decoded_result, mat_array);
  return 0;
}

int decode_data(Mat *result, Mat *decoded_result, Mat *mat_array)
{
  int ii;
  int size_of_EEPROM = 5;
  //steps to decode data
  for (ii = 0; ii < size_of_EEPROM; ii++)
  {
    decode(result, decoded_result); //decodes hamming 8,4, works
    mat_array[ii] = *decoded_result; ///This is where the problem is
  }
  return 0;
}

ポインタの助けを事前にありがとう:)

4

2 に答える 2

-1

ポインターを使用する場合、C++ には 3 つのルールがあります。次のいずれかが必要な場合は、常に他の 2 つが必要であると書かれています。これら 3 つは、デストラクタ/コピー コンストラクタ/代入演算子です。

それで、何が起こるかはあなたのシナリオにあります。mat_array[ii] = *decoded_result と書くと、実際には次のようになります。

mat_array[ii].rows = decoded_result.rows;
mat_array[ii].columns = decoded_result.columns;
mat_array[ii].data = decoded_result.data // here just assign pointers, not the entire data.

この場合、代入演算子を作成してデータの実際のコピーを作成する必要があります。

于 2013-06-27T12:58:50.740 に答える