该函数可以返回任何一个——你的选择。你说过你会返回一个指针;只要你这样做就可以了。
当你写:
static fruits_t *getFruitFromValue(char value)
{
int i;
for (i = 0; i < sizeof(fruit_array)/sizeof(fruit_array[0]); i++){
if (value == fruit_array[i].value){
return fruit_array[i];
}
}
}
有几个问题:
fruit_array[i]是一个结构,而不是一个指针。使用return &fruit_array[i];.
如果循环退出,则根本不会从函数返回值。
修复这些导致:
static fruits_t *getFruitFromValue(char value)
{
int i;
for (i = 0; i < sizeof(fruit_array)/sizeof(fruit_array[0]); i++)
{
if (value == fruit_array[i].value)
return &fruit_array[i];
}
return NULL;
}
这没关系,因为您返回的指针指向静态数据,该数据将超过函数的寿命。如果您尝试返回指向非静态数据的指针,则(可能)您手上会遇到错误,除非您使用动态内存分配(通过malloc()等)。
您也可以返回结构;处理错误返回变得更加困难。如果您有 C99,则可以使用“复合文字”:
static fruits_t getFruitFromValue(char value)
{
int i;
for (i = 0; i < sizeof(fruit_array)/sizeof(fruit_array[0]); i++)
{
if (value == fruit_array[i].value)
return fruit_array[i];
}
return (fruits_t){ .key = "", .value = 0 };
}