簡體   English   中英

如何從函數中的數組返回結構? (指針)

[英]How do you return a struct from an array within a function? (pointers)

考慮以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM