2013-02-25 27 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是在椭圆中较早的地方定义的,所有事情都按预期工作。

希望这会有所帮助。