我有一个数组通过其内容我需要迭代并准备一个新数组。我需要多次执行此操作,并且一旦我在内循环中完成了数据,我就不需要保留旧数据。
本质:
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;
^
有什么想法吗?
答案 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)
也许这就是你所追求的。该代码使用指针p1
和p2
分别指向array1
/ array2
或array2
/ 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;
}
有许多方法可以说明它,但我已经尝试将其简单化。它只是将一个数组的元素替换为另一个数组。