2012-06-18 83 views
2

我有一個結構數組。實際上,它是一個二維數組,但是是一個不尋常的二維數組。 我在棧上分配內存:更改矩陣的行

#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]; 

在此代碼中,運算符「=」將複製所有數組,不是嗎?我不需要它,我想通過改變指針來改變行數

我該怎麼做?

+0

你爲什麼要做'C [i] = C [j]'? – Kraken

+0

我需要替換行。如果我有2d數組(arr [] []),我會這樣做:*(arr + i)=(* arr + i);這是對的嗎? – user565447

回答

1

就你而言,每行代表struct ARRAY_FIX對象。如果您希望能夠通過使用引用來處理這些行(通過交換指針等來更改行的順序),則必須以允許您這樣做的方式存儲您的二維數組。

可能的解決方案是一個指針數組的二維數組更改爲struct ARRAY_FIX所以,當你調用С[i] = C[j];只有基準(你的對象的地址)被複制,而不是對象本身。

另請注意,您應該擔心性能,只有在真正需要時才能使您的程序更快。 快速製作正確的程序要比快速製作正確的程序要容易得多。

+0

不會有以下工作嗎? 'Array Fix temp;溫度= C [I]; C [i] = C [j]的; C [j]的=溫度; '? – Kraken

+0

我真的需要一個更快的程序,這就是爲什麼我問。否則,我不會使用這種結構。 – user565447

+0

@Kraken:在不改變'C'數組定義的情況下,它會複製比複製引用慢的對象。 – LihO

2

您可以使用指向struct ARRAY_FIX的指針數組,並將指針切換到數組中。

我在棧上分配內存。

在文件範圍聲明的對象通常不在堆棧上。

1

如之前所說

可能的解決方案是你的二維數組改爲指針 數組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; 
//... 
} 
+0

我不想分配動態內存。我無法理解,爲什麼我不能使用相同的操作,不分配動態內存?第一個元素是指向所有數組的指針,不是嗎? – user565447