这是我的代码的一部分
int river(int a[], int n){
int sorted[] = a;
}
n是数组的大小
我尝试了几种不同的方式,包括
sorted[n]
但我每次都遇到问题。 我想要做的是使用更改的变量名复制数组。数组将完全相同,只存储在不同的变量中(因为我想获取信息但不能修改原始数组)。
这是不可能的,因为与动态改变数组的大小有关,或者我只是忽略了这一点?
谢谢!
答案 0 :(得分:4)
首先,数组不可分配。您可以将一个数组的内容复制到另一个数组中,也可以获取指向数组第一个元素的指针。例如
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;
}
答案 1 :(得分:1)
您需要自己为数组的新副本分配空间。
int *sorted = malloc(n * sizeof(int));
memcpy(sorted, a, n * sizeof(int));
答案 2 :(得分:1)
只需尝试这样......
for(int i=0;i<n;i++)
sorted[i]=a[i];
如果您想使用动态内存分配malloc
,请尝试使用
int *sorted = malloc(n * sizeof(int));
memcpy(sorted, a, n * sizeof(int));