如何将结构体数组解析为参数?
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);
}
我应该如何将结构数组解析为函数的参数?
比如我有如下结构定义:
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);
}