如何将数组从指针转移到C上的主程序



这是我尝试运行的程序。。。

#include <stdio.h>
#define MAX 10
int suma_arreglo(int x1[], int x2[], int y);
int array1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, array2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *suma;
main()
{
int cont = 0;
suma = suma_arreglo(array1, array2, MAX);
for(cont = 0; cont < MAX; cont++)
{
printf("n%d + %d = %d", array1[cont], array2[cont], *suma++);
}

puts("");
system("pause");
}

int suma_arreglo(int x1[], int x2[], int y)
{
int cont, arraysum[y];
for(cont = 0; cont < y; cont++)
{
arraysum[cont] = x1[cont] + x2[cont];
//printf("n%d + %d = %d", x1[cont], x2[cont], arraysum[cont]);
}
return arraysum;
}

但由于某种原因,它不起作用,调试时我注意到函数和程序运行良好,但当我试图将地址arraysum返回到主程序suma中的指针时,问题就开始了。。。理论上应该是

suma = arraysum

这样它就可以在主程序中工作。无论如何,我认为在尝试将数组的数据返回到主程序的方式上仍然存在问题。

你们觉得怎么样?

这是有效的:

#include <stdio.h>
#define MAX 10
int* suma_arreglo(int x1[], int x2[], int y, int* sum_arr_ptr);
int array1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, array2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *suma;
int sum_array1[MAX];
main()
{
int cont = 0;
suma = suma_arreglo(array1, array2, MAX, sum_array1);
for(cont = 0; cont < MAX; cont++)
{
printf("n%d + %d = %d", array1[cont], array2[cont], *suma++);
}

puts("");
system("pause");
}

int* suma_arreglo(int x1[], int x2[], int y, int* sum_arr_ptr)
{

for(int cont = 0; cont < y; cont++)
{
sum_arr_ptr[cont] = x1[cont] + x2[cont];
//printf("n%d + %d = %d", x1[cont], x2[cont], arraysum[cont]);
}
return sum_arr_ptr;
}

问题是,首先,您给函数一个返回类型int,然后让它返回一个int*。其次,它返回了自己的局部变量。在函数体内部本地创建的变量在函数结束后消失,因此不能返回这些变量。

在这里,我只为函数引入第四个参数,一个指向int数组的int*指针,这样它就可以在末尾返回一个合适的结果,而不是返回函数返回后不存在的结果。还修复了从intint*的返回类型。

PS。在函数内部创建变量时,可以使用static关键字将其生存期延长到函数体之外。在这种情况下,变量只初始化一次,并一直存在到程序结束。

最新更新