簡體   English   中英

返回多維數組的函數

[英]Function that returns a multidimensional array

我有一個像這樣的函數(在file_name.c文件中):

char function_name(multi_array[][10])
{
    /*change some character of multi_array*/

    return multi_array;
}

這需要multi_array (一個字符數組),更改給定參數的某些字符,然后返回經過修改的multi_array main.c ,我這樣調用該函數:

multi_array_in_main = function_name(multi_array_in_main);

但是編譯器給我一個錯誤“ icompatible type char[10][10] from type char

我該怎么辦? 我對C不太自信,所以我不知道。

您不需要返回任何東西。

更改:

char function_name(multi_array[][10])

至:

void function_name(multi_array[][10])

而且您的代碼應該可以正常工作(只要尺寸正確, function_name將更新它作為參數接收的任何數組)。

更改該函數以返回void並刪除return語句。 數組實際上是作為指向其第一個元素的指針傳遞的,因此您在函數內對其進行的任何更改實際上都會更改調用方中的原始對象。

void function_name(multi_array[][10])
{
    /*change some character of multi_array*/
}

在函數標頭中,您聲明函數返回“ char”類型,但您返回的變量char [] [10]與聲明中的類型不同(代碼的第一行)。

解決方案取決於您真正想做什么。 如果要返回該多數組,請更改函數聲明。 另外,您將參數定義為數組數組,但必須為“ char數組數組”。 長話短說,您的聲明行可能看起來像這樣:

char[][] function_name(char multi_array[][10])

同樣,此函數在multi_array中所做的更改甚至會在函數“外部”更改multi_array,因此您實際上不需要返回它。 因此,您可能想編寫以下代碼:

void function_name(char multi_array[][10])

如前所述,您無需返回任何內容。 數組不會被復制,而是作為指向數組第一個元素的指針傳遞給函數的。 因此,在函數內部更改的任何元素也將在外部更改,因為只有一個唯一的數組。

同樣,如果您堅持認為,從理論上講,也可以定義一個函數,該函數將指針返回到與原始帖子最接近的數組。 聲明為:

char (*function_name(char multi_array[][10]))[10] {
   ...
   return(multi_array);
}

它是如此丑陋,以至於您可能希望為其定義一個新類型:

typedef char (*multi_array_t)[10];

multi_array_t function_name(multi_array_t multi_array) {
   ...
}

暫無
暫無

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

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