2

構造体の配列があります。実際には、2D配列ですが、珍しい2D配列です。スタックにメモリを割り当てています:

#define MAX_VERTICES 5068
struct ARRAY_FIX {
    int ele[MAX_VERTICES];
    int size;
    int first;
};
ARRAY_FIX C[MAX_VERTICES];
 
int main() {
//...
} 

したがって、ある行を別の行に置き換える必要があります(実際には、いくつかの基準で行を並べ替えるためにこの操作を実行する必要があります)。

行の置き換え

どうすれば実行できますか?私が理解しているように、このコードを使用する場合:

С[i] = C[j];

このコードでは、演算子「=」がすべての配列をコピーしますね。必要ありません。ポインタを変更して行を変更したいです。

どうすればいいですか?

4

3 に答える 3

2

ポインターの配列を使用して、ポインターを配列にstruct ARRAY_FIX切り替えるだけです。

スタックにメモリを割り当てています。

通常、ファイル スコープで宣言されたオブジェクトはスタック上にありません。

于 2012-06-18T09:23:34.757 に答える
1

前に言ったように

考えられる解決策は、2D 配列を構造体 ARRAY_FIX へのポインターの配列に変更することです。

ここでそれを行う方法の後:

#define MAX_VERTICES 5068
struct ARRAY_FIX {
    int ele[MAX_VERTICES];
    int size;
    int first;
};
ARRAY_FIX *C[MAX_VERTICES];

int main() {
int i;
ARRAY_FIX *p;
//...
for (i=0;i<MAX_VERTICES;++i)
{
    C[i] = malloc (sizeof(ARRAY_FIX ));
    //...
}
//...
p = C[1];
C[1] = C[2];
C[2] = p;
//...
} 
于 2012-06-18T09:39:42.510 に答える
1

あなたの場合、各行はstruct ARRAY_FIXオブジェクトで表されます。参照を使用してこれらの行を操作できるようにしたい場合 (ポインターを交換して行の順序を変更するなど)、それができるように 2D 配列を格納する必要があります。

考えられる解決策は、2D 配列をポインターのstruct ARRAY_FIXС[i] = C[j];配列に変更して、オブジェクト自体ではなく、参照 (オブジェクトのアドレス) のみがコピーされるようにすることです。

また、パフォーマンスについて心配し、本当に必要な場合にのみプログラムを高速化するようにしてください。速いプログラムを正しくするよりも、正しいプログラムを速くする方がはるかに簡単です。

于 2012-06-18T09:23:55.117 に答える