[英]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.