两个数组的总和

时间:2011-04-12 16:19:29

标签: c arrays sum

练习说“使​​用参数创建一个带有两个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)。

5 个答案:

答案 0 :(得分:5)

此:

int i,g,a[g],b[g];

导致未定义行为。初始化时g的值未定义,因此ab的长度将不确定。

您可能需要以下内容:

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){