2015-06-17 155 views
0

我需要寫一個比較函數用於qsort與指針成員結構。比方說,我有比較結構與指針成員

struct foo2_struct 
{ 
    int a; 
} 

struct foo1_struct 
{ 
    int a; 
    struct foo2_struct *b; 
} 

這是我有:

int cmp_foo1(const void *a, const void *b) 
{ 
    struct foo1_struct foo1a = *((struct foo1_struct) a); 
    struct foo1_struct foo1b = *((struct foo1_struct) b); 
    int cmp = foo1a.a - foo1b.a; 
    if (cmp == 0) 
    { 
     if (foo1a.b == foo1b.b) 
      return 0; 
     //how to continue??? 
    } 
    return cmp; 
} 

注意foo2_struct成員b不是唯一的,因爲在這種類型的兩個不同的變量可以有b相同的值。

+0

比較它們指向的foo2_struct的'int a'成員(而不是指針本身的值,我認爲當'cmp'爲零時,你只返回'ab-> a - bb-> a'。 – TripeHound

+0

您正在複製結構。我敢打賭這沒有必要。將其改爲指針操作應該會更好。 – HuStmpHrrr

+0

當你說_how要繼續??? _你可以決定排序'a'或'b'值最相關的東西!請想想你想要的順序,給我們一個例子。 –

回答

1

只需更換

int cmp = a.a - b.a; 
[...] 
if (a.b == b.b) 

通過

int cmp = foo1a.a - foo1b.a; 
[...] 
if (foo1a.b == foo1b.b) 

因爲你必須使用結構不是空指針...

編輯

另外,你可以比較的價值裏面的這個結構體不是指向s的指針truct(但我不知道你的目標反正...) 所以更換

if (foo1a.b == foo1b.b) 

通過

if (foo1a.b->a == foo1b.b->a) 

注:我讓如果你想給你處理NULL情況:)

+0

這是一個錯字,很抱歉! – Dunno