更改矩阵的行

时间:2012-06-18 09:10:40

标签: c pointers

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

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

int main() {
//...
} 

因此,我需要将一行替换为另一行(实际上,我需要执行此操作以按某些条件对行进行排序)。

Replacing of the rows

怎么可能表演?据我了解,如果我使用此代码:

С[i] = C[j];

在这段代码中,运算符“=”将复制所有数组,不是吗?我不需要它,我想通过改变指针来改变行

我该怎么做?

3 个答案:

答案 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;
//...
}