[英]Assign array to a different variable
这是我的代码的一部分
int river(int a[], int n){
int sorted[] = a;
}
n是数组的大小
我尝试了几种不同的方法,包括
sorted[n]
但是我每次都会遇到问题。 我想做的是用更改后的变量名复制数组。 该数组将完全相同,只是存储在一个不同的变量中(因为我想获取信息但不修改原始数组)。
这是否由于与动态更改数组大小有关而无法实现?还是我只是想念这一点?
谢谢!
首先,数组不可分配。 您可以将一个数组的内容复制到另一个数组中,也可以获取指向数组第一个元素的指针。 例如
int a[42] = {0};
int* b = a; // now you can access a's elements as b[0], b[1], etc.
int c[42];
memcpy(c, a, 42*sizeof(int)); //copy elements of a into c
二,要注意函数签名
int foo(int a[]);
是另一种说法
int foo(int* a);
即,它可以使用任何指向int的指针,甚至不指向数组的指针。
考虑到这一点,您可以看到很容易丢失数组大小信息,这就是为什么需要将大小作为参数传递的原因:
int foo(int a[], size_t n);
int a[42];
foo(a, 42);
现在,在函数内部,您可以将一个数组的元素复制到另一个数组中:
int foo(int* a, size_t n)
{
int sorted[n];
memcpy(sorted, a, n * sizeof(int));
// use sorted
....
return 0;
}
您需要自己为数组的新副本分配空间。
int *sorted = malloc(n * sizeof(int));
memcpy(sorted, a, n * sizeof(int));
只需这样尝试...
for(int i=0;i<n;i++)
sorted[i]=a[i];
如果要使用动态内存分配malloc
,请尝试以下操作
int *sorted = malloc(n * sizeof(int));
memcpy(sorted, a, n * sizeof(int));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.