2016-03-27 142 views
1

我有一個結構數組,我希望按升序排序。排序C中的結構數組

經過對Stack Overflow的大量研究,我發現了sorting members of structure array

因此,我有以下代碼:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct StockItem { 
    int unitPrice; 
    // ... 
} stockItem; 

int comparePrice(const void* a, const void* b) 
{ 
    stockItem *stockItem1 = (stockItem *) a; 
    stockItem *stockItem2 = (stockItem *) b; 
    return stockItem1->unitPrice - stockItem2->unitPrice; 
} 

int main() { 
    stockItem stockItem1; 
    stockItem1.unitPrice = 15; 

    stockItem stockItem2; 
    stockItem2.unitPrice = 41; 

    stockItem stockItem3; 
    stockItem3.unitPrice = 25; 

    stockItem stockItems[3] = {stockItem1, stockItem2, stockItem3}; 
    int size = 3; 

    qsort(stockItems, (size_t) size, sizeof(int), comparePrice); 

    printf("\n"); 
    for (int i = 0; i < size; i++) { 
     printf("%d\n", stockItems[i].unitPrice); 
    } 

    return 0; 
} 

然而,這似乎並沒有對數組進行排序。

+1

你會得到什麼輸出? –

+0

什麼是sizeof(int)和sizeof(stockItem)'? – dbush

+0

它只是返回相同的數組,沒有變化 –

回答

4

這很奇怪。我唯一能看到的是你應該使用sizeof(stockItem),而不是int,但這應該不重要,除非你的系統有奇怪的對齊。此外,size_t的大小並不是必需的,但這絕對沒有關係。

編輯:我試圖添加一個鏈接到在線工作的代碼,但它是我不好的鏈接。基本上,除非使用包裝,否則不保證結構對齊。

+0

這應該是一個評論。 –

+0

這實際上是答案!嘗試改寫您的帖子以更適合作爲答案。我使用'sizeof(int)',我應該使用'sizeof(stockItem)'。 –

+2

是的,它應該,我張貼得太早,因爲我的手指上有贅肉 –