gpt4 book ai didi

c - 从 C 函数返回数组

转载 作者:行者123 更新时间:2023-11-30 17:17:20 27 4
gpt4 key购买 nike

由于某种原因,我的函数只返回数组中的第一个元素,我无法弄清楚为什么数组的其余部分超出了范围。该函数采用两个整数数组,将它们各自的元素相加,并将总和放入返回的第三个数组中。

这是我的代码:

#include <stdio.h>
/* count digits, white space, others */

int *sumarrays(int arr1[], size_t arr1len, int arr2[], size_t arr2len);

void main() {

int arr1[10];
size_t arr1len = 10;
int arr2[10] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
size_t arr2len = 10;
int i;

int *x;

arr1[0] = 2;
arr1[1] = 3;
arr1[2] = 2;
arr1[3] = 2;
arr1[4] = 2;
arr1[5] = 2;
arr1[6] = 3;
arr1[7] = 2;
arr1[8] = 2;
arr1[9] = 2;

//printf("%d\t%d\t%d\n", arr1, *arr1, *(arr1 + 1));
x = sumarrays(arr1, arr1len, arr2, arr2len);

for (i = 0; i < 10; i++) {
printf("Array1: %d\tArray 2: %d\tX = %d\n", arr1[i], arr2[i], x[i]);

}

//return 0;
}

int *sumarrays(int arr1[], size_t arr1len, int arr2[], size_t arr2len) {
int i;
int total[10];

for (i = 0; i < 10; i++) {
total[i] = *(arr1 + i) + *(arr2 + i);

}
for (i = 0; i < 10; i++) {
printf("%d\t", total[i]);
}

printf("\n");
return total;
}

这是输出:

4   5   4   4   4   4   5   4   4   4   
Array1: 2 Array 2: 2 X = 4
Array1: 3 Array 2: 2 X = 1974388256
Array1: 2 Array 2: 2 X = -161927102
Array1: 2 Array 2: 2 X = 2686628
Array1: 2 Array 2: 2 X = 8670801
Array1: 2 Array 2: 2 X = 0
Array1: 3 Array 2: 2 X = 27
Array1: 2 Array 2: 2 X = 2686540
Array1: 2 Array 2: 2 X = 4
Array1: 2 Array 2: 2 X = 2686916

第一行是函数内的数组元素之和。剩下的就是 main() 中发生的事情。

我错过了什么?

*编辑*已回答

谢谢大家的帮助!其实我不久前就学过 C 和 C++,但最近开始回过头来调整我的知识。非常感谢所有的帮助。

主要答案是

1)静态分配内存(使用static关键字)

2)动态分配内存(使用malloc())

3)使变量全局

4)将结果total()作为参数传递给函数,这样它就不会超出范围。

最佳答案

您正在为数组进行堆栈分配,当函数返回时,堆栈分配的存储就会消失。请改用堆分配。

改变

int 总计[10];

int* 总计 = malloc(10*sizeof(int))

当然,这意味着您在使用完内存后还必须释放内存。在这种情况下,在 main 中的 return 0; 之前,您需要

free(x);

关于c - 从 C 函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29439297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com