[英]C - Returning array from function
我的問題是,我有一個包含.c文件的C項目:
trab.c
ordena.c
persistencia.c
persistencia.c
我需要從.txt文件中讀取X整數
trab.c
主要有。 我必須調用persistencia.c
來獲取一個X數組(由main中的param定義)整數和來自ordena.c
調用排序函數,將所述數組作為param傳遞。
我的問題是。 做得不那么簡單的方法是什么? 我可以聲明一個全局數組而不是通過參數傳遞嗎? 我可以使用malloc從另一個類中獲取var嗎?
你可以使用malloc
來分配一個X
int
數組(我假設你知道並提前有#define
d X)。
int *array = malloc( X * sizeof(int) );
malloc
將一個指針 (一個存儲地址在內存中的變量)返回給數組。 如果X
不知道apriori,你可以通讀文件來確定有多少int
,並添加另一個int*
參數,以通信給調用者讀取了多少。 您可以從persistencia.c中的函數返回ptr,只要很明顯調用者有責任free
內存。 函數聲明看起來像
int *readInts();
要將數組傳遞給ordena.c中的函數,您可以將其作為int*
類型的參數
void ordena(int *array, size_t length);
Logan Rakai有一個很好的答案,但是,我希望提供一種不同的方法,因為我的經驗表明,最好不要在可能的情況下返回動態分配的內存(有時它不是)。
更靈活的設計是編寫一個接受指針和數組大小的函數。
此外,在編寫需要維護的長期項目時(可能不僅僅是由您自己,而是由其他程序),最好將“關注點”保持在一起。
一個很好的例子是,當調用函數執行內存管理( free
)時,最好是在同一個調用函數中執行內存分配( malloc
)...當分割不同函數之間的內存管理問題時,它是更有可能未來的維護者會在代碼中引入內存泄漏。
在這種情況下,使用堆棧或malloc
分配數組並將其傳遞非常簡單。
也就是說,這是一個快速(有點無用)的例子,用於將內存管理問題轉移到調用函數( main
)中。 請注意,這允許您在調用與數組相關的函數時使用動態內存分配和堆棧分配。
size_t get_array_size(void /* or any parameters */) {
/* do whatever you need */
return 10; /*for our example */
}
void fill_array(int *arry, size_t size) {
while (size) {
size--;
arry[size] = 1; /* fill in data here */
}
}
int use_array(int *arry, size_t size) {
fprintf(stderr, "***\n");
while (size) {
size--;
arry[size] -= 1; /* do whatever */
fprintf(stderr, "array[%lu] == %d\n", size, arry[size]);
}
return 0; /* or return -1 for error */
}
int main(int argc, char const *argv[]) {
int array1[20];
int *array2;
size_t array2_size = get_array_size();
array2 = malloc(sizeof(*array2) * array2_size);
fill_array(array1, 20);
fill_array(array2, array2_size);
if (use_array(array1, 20))
perror("WTF?! "), exit(0);
if (use_array(array2, array2_size))
perror("WTF?! "), exit(0);
return 0;
}
那是我2¢。 我的錯誤管理代碼可能有些不正常,但在錯誤上返回-1
更常見於人們會相信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.