如果这看起来很简单,我深表歉意,我仍在学习并且对C还是陌生的。
我将其作为结构体
struct Game{
char id;
char name[50];
char genre[20];
char platform[15];
char company[30];
float price;
int quantity = 10;
};
并将其声明为结构数组:
struct Game gList[30];
我有一个函数,可以传递所有'gList'来搜索gList [i] .name变量中的值。
所以我的问题是,是否可以仅将结构的gList [i] .name部分作为参数发送给函数?(即,仅所有30个 name 值)。
答案 0 :(得分:1)
否。
但是您可以创建一个指向name
字段的指针数组,并将其传递给函数:
char* ptr[30];
for(int i = 0; i < 30; i++)
ptr[i] = gList[i].name;
func(ptr);
答案 1 :(得分:0)
不,你不能。但是,您可以将迭代器传递给函数。典型模式:
struct context { struct Game *gList; int nList; int i; }
char *iter_names(void *baton)
{
struct context *ptr = baton;
if (ptr->i == ptr->nList) return NULL;
return ptr->gList[ptr->i++].name;
}
void wants_name_array(char (*nextname)(void *), void *baton)
{
while (char *name = nextname(baton))
{
printf("%s\n", name);
/* and whatever else you are doing */
}
}
/* ... */
struct context baton = { gList, 30, 0 };
wants_name_array(iter_names, baton);
是的,看起来有点不好。值得庆幸的是,gcc
的扩展使它变得更好。
void wants_name_array(char (*nextname)())
{
while (char *name = nextname())
{
printf("%s\n", name);
/* and whatever else you are doing */
}
}
/* ... */
{
int i = 0;
char *nextname()
{
if (i == 30) return NULL;
return gList[i++].name;
}
wants_name_array(nextname);
}
使用此特定的gcc
扩展名时,切勿返回嵌套函数。未定义的行为。