开发者

Sum of two arrays

开发者 https://www.devze.com 2023-02-25 14:29 出处:网络
The exercise says \"Make a function with parameters two int arrays and k which is their size. The function should return another array (size k) where every element of it is the sum of the two arrays o

The exercise says "Make a function with parameters two int arrays and k which is their size. The function should return another array (size k) where every element of it is the sum of the two arrays of the same position. That's what I wrote, but it crashes. Do I have to do it with pointers?

#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[开发者_C百科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");
}

Example: If i have A={1,2,3,4} and B={4,3,2,1} the program will return C={5,5,5,5).


This:

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

causes undefined behaviour. The value of g is undefined upon initialisation, so therefore the length of a and b will be undefined.

You probably want something like:

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


Its impossible to first do a[g] when dynamically getting g.

Your first lines in main should be:

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


int sum[k] ;

k is a variable but the size of the array should be a constant.

The function should return another array (size k) ...

But the function you wrote returns void which is clearly wrong.

Do I have to do it with pointers?

Yes.


One issue is that you've attempted to declare dynamically sized arrays on the stack (e.g. a[g]). You need to declare pointers for each array and then dynamically allocate your variable sized array once you've read in the value of g.


change the function summary signature (the definition part of the declaration) to this and try it out:

void sumarray(int k,int* A,int* B){

0

精彩评论

暂无评论...
验证码 换一张
取 消