如何将动态数组的某些部分分配给整个静态数组

时间:2011-03-07 19:14:37

标签: c arrays

动态数组的大小是静态数组的两倍。我想将从动态数组的(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;
}

4 个答案:

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