繁体   English   中英

将数组分配给其他变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM