-2

関数を使用してグローバルポインタとして宣言された動的に割り当てられた行列を操作しようとしています。簡単にするために、ここにコードを貼り付けるつもりはありませんが、同等の、おそらくより明確な例を提供します

structname **variable;

int main()
{
    variable = readfile("filename");
    variable = modify(variable);
    output(variable);
}

これは非常に単純に見え、入力と出力は正しく機能します。問題は、「変更」関数が変更を行わないことです。これはその一例です。

structname **modify(structname **p)
{
  swapitems(p[x][y],p[j][z]);
  modifyitem(p[x][y]);
  return p;
}

void swapitems(structname a, structname b)
{
     structname buffer;

     buffer = b;
     b = a;
     a = buffer;
}

問題は、要素を渡すことができないことだと思いますswapitemsmodifyitemそのような関数を使用してアイテムを変更するにはどうすればよいmodifyですか?(もちろん、コンパイルエラーはありません)

4

1 に答える 1

4

実際には構造体自体を引数として渡しているため、どのスタックの場所にどの構造体が含まれているかを交換するだけで、元の配列には影響しません。配列内の構造体の実際のアドレスを渡すことで、これを修正できます。

void swapitems(structname* a, structname *b){

    structname buffer;

    buffer = *b;
    *b = *a;
    *a = buffer;
}

次に、関数呼び出しは

swapitems(&p[x][y],&p[j][z]);

同様に、変更するアイテムのアドレスを渡す必要がありますmodifyitem

于 2012-05-24T17:35:54.947 に答える