如果该结构作为数组存在,是否只能从该结构发送一个变量?

时间:2019-03-31 04:40:49

标签: c struct

如果这看起来很简单,我深表歉意,我仍在学习并且对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 值)。

2 个答案:

答案 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扩展名时,切勿返回嵌套函数。未定义的行为。