动态数组的大小是静态数组的两倍。我想将从动态数组的(N / 2)-1到N-1开始的值分配给整个静态数组。
唯一的方法是用循环复制值吗?
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
int N=100, pSize=4, lSize, i;
double *A;
lSize=N/sqrt(pSize);
/* memory allocation */
A=(double*)malloc(sizeof(double)*N);
double B[lSize];
/* memory allocation has been done */
/* initilize arrays */
for(i=0; i<lSize; i++){
B[i]=rand()% 10;
}
A=B;
for (i=0; i<lSize; i++){
fprintf(stdout,"%f\n", A[i]);
}
return 0;
}
答案 0 :(得分:2)
您可以使用memcpy功能复制数据。对于您的示例,您希望将A的后半部分复制到B,因此可以执行以下操作:
memcpy(&B[0], &A[lSize-1], lSize * sizeof(double));
注意:在我使用的MinGW编译器上,它要求我将目的地声明为&amp; B [0],我以为我可以只用B来逃避。这可能是由于我的配置(我不喜欢)不要使用C编译器,通常只使用g ++来快速C ++测试用例。)
答案 1 :(得分:0)
您可以使用memcpy复制连续的内存块。
答案 2 :(得分:0)
您的程序泄漏了您的分配,这可能很糟糕 - 是A=B
打算放置复制数组的代码吗?
根据您的体系结构,可以在没有CPU循环的情况下进行复制(通过调用DMA引擎或其他东西)。在标准C中,你别无选择,只能循环。您可以自行完成,也可以拨打memcpy(3)
,memmove(3)
或bcopy(3)
,如果您更喜欢使用该库的实现。
答案 3 :(得分:0)
如上所述,您需要使用memcpy:
#define N 100
int staticarray[N];
int *pointer = (int*) malloc( sizeof(int)*N*2 );
memcpy( staticarray, (pointer + ((N/2) - 1)), sizeof(int)*N );