2011-06-30 252 views
1

我在比較結構數組的兩個節點之間的變量dist。指向結構數組的指針

這是結構:

struct arco{ 
    int u, v; 
    double temp, dist; 
}arcos[MAXOASIS]; 

這是我的代碼:

int compDist(const void *a, *void const *b, i, j){ 
    struct arco *ia = (struct arco *)a; 
    struct arco *ib = (struct arco *)b; 
    ia->arco[i].dist; 
    ib->arco[j].dist; 
    return(if(*ia > *ib)? *ia : *ib) 
} 

但它是錯誤的。應該怎麼做?

+1

包含結構聲明,向我們展示如何定義該數組,並讓我們知道您正在嘗試/要求做什麼。 –

回答

3
ia->arco[i].dist; 
    ib->arco[j].dist; 

那該怎麼辦?你可能想要類似

return(ia->arco[i].dist > ib->arco[j].dist? ia->arco[i].dist : ia->arco[j].dist) 

你可以使用一些中間變量使它更清潔。

編輯

在你編輯的光很可能你想:

return (ia->dist - ib->dist); 
+0

我試圖在arcos []中比較ith和jth dist的值,將這些值賦給指針,然後將它們進行比較。 –

+0

@Ignacio Pochart什麼是'a'和'b'?你怎麼調用這個函數? – cnicutar

1

您compairing指針strutcs而不是變量。我不知道你的結構定義,但我認爲你需要這樣的東西:

return(if(ia->arco[i].dist > ib->arco[i].dist)? 1 : 0); 
0

這裏有很多錯誤在你的代碼, 您最初返回結構的指針,而你的函數聲明說INT。

struct arco *compDist(const void *a, *void const *b, i, j){ 
    struct arco *ia = (struct arco *)a; 
    struct arco *ib = (struct arco *)b; 
    return(if(ia->arco[i].dist > ib->arco[j].dist)? *ia : *ib) 
} 

也像

if(*ia > *ib) 

的比較是無效的,你不能只比較兩個結構,在C++中,你可以重載「>」操作,但你不能這樣做在同據我所知。

這應該工作,但我不能保證它,因爲我不知道你是如何定義你的結構arco。

0

arco不是arco的成員。

而不是說「這是錯誤的」,發佈編譯器錯誤,你會得到更好的答案,作爲回報。