无法理解程序(结构数组的排序)

标签 c

我有一个代码:必须排序的结构数组。程序可以运行,但是:

我不明白,如果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/

相关文章:

c - 在字符串数组中查找字符串。 (C代码)

c - 如何反转 3 位数字

c - 快速排序程序提供部分排序的输出

c - 多线程 cp 程序的段错误

c - 我怎么知道C中的函数是否是系统调用

c - 初始化结构体 C 中的变量矩阵

c - 为什么 printf 不使用科学记数法?

c - 提高在 C 中合并两个文件的 IO 性能

C 编程 : Codeblocks stops working with C till I make a tiny change. 知道为什么吗?

c - 为什么缓冲 I/O 比非缓冲 I/O 更快