是否有像memcpy()
这样的函数来添加数组中的值?像memconcatenate()
这样的东西可能吗?
如果没有,是否有一些等价的方法可以将数组的值添加到另一个(除了使用循环)?
编辑:我认为通过编写一个函数memconcatenate()
我犯了一个大错误。我不要意味着从头到尾连接两个数组。我对元素添加感兴趣。与@ user3386109建议一样,请考虑:memsum()
。
答案 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];
}