我有一个代码:必须排序的结构数组。程序可以运行,但是:
我不明白,如果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) {...........}
最佳答案
由于我们看不到完整的代码,我的猜测是,当您使用 malloc 动态分配数组时,您忘记为 N 个“对象”分配数组。换句话说,我怀疑你的问题出在这一行
Mat = malloc(sizeof(tArt));
它应该在哪里
Mat = malloc(sizeof(tArt) * N);
另一方面,当您使用以下形式的声明显式创建数组时
tArt Mat[N];
其中 N 是在省略号前面的某个位置定义的,一切都按预期工作。
希望这有帮助。
关于无法理解程序(结构数组的排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071280/