2

我有一个结构数组。实际上,它是一个二维数组,但却是一个不寻常的二维数组。我在堆栈上分配内存:

#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

在您的情况下,每一行都由struct ARRAY_FIX对象表示。如果您希望能够通过使用引用来处理这些行(通过交换指针等来更改行的顺序),您的二维数组必须以允许您这样做的方式存储。

可能的解决方案是将二维数组更改为指针数组,struct ARRAY_FIX以便在调用时С[i] = C[j];仅复制引用(对象的地址),而不是对象本身。

另请注意,您应该担心性能并仅在真正需要时才尝试使程序更快。快速编写正确的程序比编写正确的快速程序要容易得多。

于 2012-06-18T09:23:55.117 回答
1

如前所述

可能的解决方案是将您的二维数组更改为指向 struct 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 回答