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) {...........}
4

2 回答 2

1

由于我们看不到整个代码,我的猜测是,当您使用 malloc 动态分配数组时,您忘记为 N 个“对象”分配数组。换句话说,我怀疑你的问题在于

Mat = malloc(sizeof(tArt));

它应该在哪里

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

另一方面,当您使用表单声明显式创建数组时

 tArt Mat[N];

其中 N 在椭圆中较早的地方定义,一切都按预期工作。

希望这可以帮助。

于 2013-02-25T16:53:22.830 回答
0

tArt *sMattArt sMat[]和之间没有区别tArt sMat[1234],编译器将它们都视为tArt *sMat并忽略长度信息。

于 2013-02-25T16:21:55.107 回答