我有一系列结构。实际上,它是一个二维阵列,但是一个不寻常的二维阵列。 我在堆栈上分配内存:
#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];
在这段代码中,运算符“=”将复制所有数组,不是吗?我不需要它,我想通过改变指针来改变行
我该怎么做?
答案 0 :(得分:2)
您可以使用指向struct ARRAY_FIX
的指针数组,只需将指针切换到数组中。
我在堆栈上分配内存。
在文件范围内声明的对象通常不在堆栈中。
答案 1 :(得分:1)
在您的情况下,每行由struct ARRAY_FIX
对象表示。如果您希望能够通过使用引用(通过交换指针等来更改行的顺序)来处理这些行,则必须以允许您执行此操作的方式存储2D数组。
可能的解决方案是将2D数组更改为指向struct ARRAY_FIX
的指针数组,以便在调用С[i] = C[j];
时仅复制引用(对象的地址) ,而不是对象本身。
另请注意,您应该担心性能并尝试仅在真正需要时才使程序更快。 制作正确的程序比制作快速程序更快更容易。
答案 2 :(得分: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;
//...
}