如何将结构体数组解析为参数?

How to parse a structure array as a parameter?

我应该如何将结构数组解析为函数的参数?

比如我有如下结构定义:

struct Town
{
    char *TownName;
    char **GiftList;
    int  *GiftCount;
    int  GiftTypes;
};

以及在我的 main:

中的此类结构数组的声明
struct Town TownList[100];
struct Town AuxiliaryStructure;

我已经为这个数组写了一个自定义排序函数,我想在其中使用每个结构的字段,但我不知道如何将数组 TownList[100] 提供给 sort功能。

要将 任意值 的数组传递给函数,只需传递指向第一个元素的指针加上数组长度即可:

struct mystruct {
  char* something;
  /* ... */
}
struct mystruct myarray[100];

void do_something(struct mystruct* array, int length)
{
  int i;
  for (i=0; i<length; ++i)
  {
    array[i].something = ...
  }
}

int main(void)
{
  do_something(myarray, 100);
  return 0;
}

根据你写的,你会在调用者中引用它并传递结果。例如:

void sort(char* str){
  ...
}

int main(){
  for(int i=0; i<100; ++i){
    sort(array[i].something);
  }
}

或者你可能想传递完整的数组并在另一个函数中处理它,就像这样:

void sort(struct mystruct * array){
  ...
}

int main(){
  for(int i=0; i<100; ++i){
    sort(array);
  }
}

另一方面,如果您的意思是要根据某些内容对结构的外部数组进行排序,那么您要么必须像上面那样传递数组并实现自己的排序,要么使用采用函数指针的排序函数,因此您可以编写比较器。后者在标准 C 库中可用,可以像这样使用。

#include <stdlib.h>
int compare_mystruct_by_something(const void *a, const void *b){
    return strcmp(((struct mystruct*)a)->something, ((struct mystruct *)b)->something);
}
int main(){
  qsort(array, 100, sizeof(struct mystruct), compare_mystruct_by_something);
}