如何将一个变量的数组替换为另一个?

时间:2018-03-14 22:25:29

标签: c

我有一个数组通过其内容我需要迭代并准备一个新数组。我需要多次执行此操作,并且一旦我在内循环中完成了数据,我就不需要保留旧数据。

本质:

double array[dim];
double temparray[dim];

/*initialise array*/

for(...){
    for(...){
        /*replace contents of temparray based on contents from array*/
    }
    array = temparray;
}

但是,此代码中断了:

error: assignment to expression with array type
array = temparray;
      ^

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

您可以使用几个辅助指针并交换它们的值,而不是每次都复制数组。

所以,如果我理解你的意图,你可以这样写:

#include <stdio.h>

void swap_dptr(double **a, double **b)
{
    double *tmp = *a;
    *a = *b;
    *b = tmp;
}

#define dim 5

int main(void) {
    double a[dim];
    double b[dim] = {9, 8, 7, 6, 5};

    double *pa = a;
    double *pb = b;

    for (int i = 0; i < 10; ++i)
    {
        for (int j = 0; j < dim; ++j)
        {
            pa[j] = 1.0 - 0.5 * pb[j];
            printf("%10.6f", pa[j]);
        }
        puts("");
        swap_dptr(&pa, &pb);
    }
    return 0;
}

答案 1 :(得分:2)

也许这就是你所追求的。该代码使用指针p1p2分别指向array1 / array2array2 / array1

#include <stdio.h>

static void dump_array(const char *tag, int num, double *data)
{
    printf("%8s", tag);
    for (int i = 0; i < num; i++)
        printf(" %4.0f", data[i]);
    putchar('\n');
}

int main(void)
{
    int dim = 10;
    double array1[dim];
    double array2[dim];

    for (int i = 0; i < dim; i++)
        array1[i] = i;

    double *p1 = array1;
    double *p2 = array2;

    dump_array("p1:", dim, p1);
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < dim; j++)
            p2[j] = 2 * (p1[j] + 2) + j;
        dump_array("p2:", dim, p2);
        dump_array("array1:", dim, array1);
        dump_array("array2:", dim, array2);
        double *tp = p1;
        p1 = p2;
        p2 = tp;
        putchar('\n');
    }
}

示例输出:

     p1:    0    1    2    3    4    5    6    7    8    9
     p2:    4    7   10   13   16   19   22   25   28   31
 array1:    0    1    2    3    4    5    6    7    8    9
 array2:    4    7   10   13   16   19   22   25   28   31

     p2:   12   19   26   33   40   47   54   61   68   75
 array1:   12   19   26   33   40   47   54   61   68   75
 array2:    4    7   10   13   16   19   22   25   28   31

     p2:   28   43   58   73   88  103  118  133  148  163
 array1:   12   19   26   33   40   47   54   61   68   75
 array2:   28   43   58   73   88  103  118  133  148  163

     p2:   60   91  122  153  184  215  246  277  308  339
 array1:   60   91  122  153  184  215  246  277  308  339
 array2:   28   43   58   73   88  103  118  133  148  163

     p2:  124  187  250  313  376  439  502  565  628  691
 array1:   60   91  122  153  184  215  246  277  308  339
 array2:  124  187  250  313  376  439  502  565  628  691

答案 2 :(得分:0)

您无法直接将数组分配给另一个数组。对于这个问题,你有2个选项,第一个是使用指针并将指针指定给其他指针。第二个是使用循环并将值逐个分配给另一个数组。

render

上述代码只是实现目标的一个小例子。

答案 3 :(得分:-1)

编译器是对的,你不能直接分配数组。您可以直接启动它,然后循环它以更改它:

#include <stdio.h>

double array[5] = {1, 2, 3, 4, 5};
double temparray[5] = {0, 0, 0, 0, 0};

void printArrays() {
    for (int i = 0; i < 5; i++) {
        printf("%f\n", array[i]);
    }
    for (int i = 0; i < 5; i++) {
        printf("%f\n", temparray[i]);
    }
}

void arrayCopy() {
    for (int i = 0; i < 5; i++) {
        array[i] = temparray[i];
    }
}

int main() {
    printf("Hello, Arrays!\n");
    printArrays();
    arrayCopy();
    printf("Hello, Arrays!\n");
    printArrays();
    return 0;
}

有许多方法可以说明它,但我已经尝试将其简单化。它只是将一个数组的元素替换为另一个数组。