练习说“使用参数创建一个带有两个int数组的函数,k是它们的大小。函数应该返回另一个数组(大小为k),其中每个元素都是同一位置的两个数组的总和。这是我写的是什么,但它崩溃了。我必须用指针做吗?
#include <stdio.h>
#include <stdlib.h>
void sumarray(int k,int A[k],int B[k]){
int sum[k],i;
for(i=0;i<k;i++){
sum[i]=A[i]+B[i];
printf("sum[%d]=%d\n",i,sum[i]);}
}
main(){
int i,g,a[g],b[g];
printf("Give size of both arrays: ");
scanf("%d",&g);
for(i=0;i<g;i++){
a[i]=rand();
b[i]=rand();
}
sumarray(g,a,b);
system("pause");
}
示例:如果我有A = {1,2,3,4}且B = {4,3,2,1},程序将返回C = {5,5,5,5)。
答案 0 :(得分:5)
此:
int i,g,a[g],b[g];
导致未定义行为。初始化时g
的值未定义,因此a
和b
的长度将不确定。
您可能需要以下内容:
int i, g;
int *a;
int *b; // Note: recommend declaring on separate lines, to avoid issues
scanf("%d", &g);
a = malloc(sizeof(*a) * g);
b = malloc(sizeof(*b) * g);
...
free(a);
free(b);
答案 1 :(得分:1)
动态获取a[g]
时,无法先g
。
你在main的第一行应该是:
int i,g;
int *a,*b;
printf("Give size of both arrays: ");
scanf("%d",&g);
a = (int *)malloc(g*sizeof(int));
b = (int *)malloc(g*sizeof(int));
答案 2 :(得分:0)
int sum[k] ;
k
是一个变量,但数组的大小应该是一个常量。
该函数应返回另一个数组(大小为k)......
但你写的函数返回void
,这显然是错误的。
我是否必须使用指针进行操作?
是
答案 3 :(得分:0)
一个问题是你试图在堆栈上声明动态大小的数组(例如a[g]
)。您需要为每个数组声明指针,然后在读入g
的值后动态分配变量大小的数组。
答案 4 :(得分:0)
将函数摘要签名(声明的定义部分)更改为此并尝试:
void sumarray(int k,int* A,int* B){