将数组分配给另一个变量

时间:2014-10-06 06:59:54

标签: c arrays variables

这是我的代码的一部分

int river(int a[], int n){
  int sorted[] = a;
}

n是数组的大小

我尝试了几种不同的方式,包括

sorted[n]

但我每次都遇到问题。 我想要做的是使用更改的变量名复制数组。数组将完全相同,只存储在不同的变量中(因为我想获取信息但不能修改原始数组)。

这是不可能的,因为与动态改变数组的大小有关,或者我只是忽略了这一点?

谢谢!

3 个答案:

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