2013-02-25 28 views
0

我有一個代碼:必須排序的結構數組。程序工程,但:無法理解程序(排序結構數組)

我不明白,如果Mat是指針,爲什麼不是void sort(tArt *sMat),但void sort(tArt sMat[])。我真的很困惑。

typedef struct{ 
    char data[26]; 
}tArt; 

... 

int main(void) 

{ 
    FILE* fMat; fMat=fopen.......... 

    tArt* Mat; 

    ... 

    Mat=malloc(sizeof(tArt)); 

    for(i=0;i<N;i++) fread(&Mat[i],sizeof(tArt),1,fMat); 

    fclose(fMat); 

    sort(Mat,N); 
... 
} 

void sort(tArt sMat, int num) {...........} 
+1

tArt *和tArt []是等價的。 – semao 2013-02-25 16:16:00

+0

如果你想要一個_real answer_ post _real code_;至少是一個你不瞭解的行爲[簡短的獨立可編譯示例](http://sscce.org)。大部分代碼不需要使用'sort',而實際執行的部分可能是錯誤的 - 至少在當前的列表中。 – Zeta 2013-02-25 16:17:25

+0

無法與@Zeta達成更多共識。一堆散佈的橢圓並不是一個程序。 – 2013-02-25 16:27:24

回答

0

tArt *sMattArt sMat[]tArt sMat[1234]沒有區別,編譯器把它們都作爲tArt *sMat而忽略長度信息。

1

我的猜測是因爲我們無法看到整個代碼,因爲當您使用malloc動態分配數組時,您忘記爲N個對象分配數組。換句話說,我懷疑你的問題出在線路

Mat = malloc(sizeof(tArt)); 

,它應該是

Mat = malloc(sizeof(tArt) * N); 

在另一方面,當你與形式的聲明創建明確的陣列

tArt Mat[N]; 

其中N是在橢圓中較早的地方定義的,所有事情都按預期工作。

希望這會有所幫助。