C函数对两个数字数组求和?

时间:2016-05-06 05:18:30

标签: c arrays function

是否有像memcpy()这样的函数来添加数组中的值?像memconcatenate()这样的东西可能吗?

如果没有,是否有一些等价的方法可以将数组的值添加到另一个(除了使用循环)?

编辑:我认为通过编写一个函数memconcatenate()我犯了一个大错误。我不要意味着从头到尾连接两个数组。我对元素添加感兴趣。与@ user3386109建议一样,请考虑:memsum()

3 个答案:

答案 0 :(得分:1)

  

是否有像memcpy()这样的函数来添加数组中的值?像memconcatenate()这样的东西可能吗?

标准库没有任何此类功能。

  

如果没有,是否有一些等价的方法可以将数组的值添加到另一个(除了使用循环)?

我认为如果不使用循环,就有办法做到这一点。

答案 1 :(得分:0)

没有标准的库函数来执行memconcatenate这样的事情,但memcpy也会有所帮助。假设您有两个数组,并且想要连接它们,如果要将数组b放在a的第n个位置:

int a[N];
int b[M];
memcpy(a+n, b, sizeof b);

但在这种情况下,您需要确保源数组有足够的空间来容纳组合的较大数组。通常,您需要创建一个新数组来组合两个数组:

int a[N];
int b[M];
int *c = malloc(sizeof a + sizeof b);
memcpy(c, a, sizeof a);
memcpy((char*)c + sizeof a, b, sizeof b);

要添加两个数组,您将需要循环,没有其他选项:

int a[N], b[N];
int c[N];

for (int I = 0; I < N; I++)
    c[I] = a[I] + b[I];

这假设两个数组的大小相同。

答案 2 :(得分:0)

  

如果没有,是否有一些等价的方法可以将数组的值添加到另一个(除了使用循环)?

即使你有一个函数来执行它,函数内部也会有一个循环。这样的事情。

 // elementsa is the no of elements in a.
 // elementsb is the no of elements in b.
 // The concatenated array is stored in a[]. 
 // You need to ensure that the array is big enough to hold (elementsa+elementsb)
 void memconcat(int a[], int b[], int elementsa, int elementsb)
 {
   int i;
   for (i=0; i< elementsb; i++)
     a[i+elementsa] = b[i];
 }

根据后面的编辑,您想要对元素求和。要做到这一点,还需要一个循环。但是,这个循环可以在函数内部。

// You need to ensure that a[] and b[] are of the same size,
// The output is stored in a[]
void memsum(int a[], int b[], int noelements)
{
  int i;
  for (i=0; i<noelements;i++)
     a[i] += b[i];
}