gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:33:15 25 4
gpt4 key购买 nike

考虑这段代码:

typedef struct fruits_s
{
char* key;
char value;
} fruits_t;

static fruits_t fruit_array[] = {
{ "Apple", 1 },
{ "Banana", 2 },
{ "Grape", 3 },
{ "Orange", 4 } };

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

我是 C 的新手,并且在需要/使用指针时仍在学习。我从 Java 背景中被宠坏了。所以,在上面的代码中,我感到困惑的是函数是否应该返回一个指针 fruits_t*?或者是其他东西?当我执行 fruit_array[i] 时,它是指向我的结构的指针还是结构本身?

也就是说,稍后在我的代码中,当我想使用该函数时,是不是这样的:

 fruits_t* temp = getFruitFromValue(1);

 fruits_t temp = getFruitFromValue(1);

 fruits_t temp = &getFruitFromValue(1);

最佳答案

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

当你写的时候:

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

有几个问题:

  1. fruit_array[i] 是结构体,不是指针。使用 return &fruit_array[i];
  2. 如果循环退出,您根本不会从函数返回值。

修复这些导致:

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

关于c - 如何从函数中的数组返回结构? (指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com