c - 如何从函数中的数组返回结构?(指针)

分类: 365bet有手机app吗 时间: 2025-08-22 19:15:27 作者: admin

该函数可以返回任何一个——你的选择。你说过你会返回一个指针;只要你这样做就可以了。

当你写:

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 };

}