[英]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];
}
}
}
有幾個問題:
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 };
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.