1

在我发现这个非常有用的问答之后:如何将数组的所有成员初始化为相同的值?,我开始想知道,如果我经常遇到的问题是如何在C.

这些是我最感兴趣的一些案例:

  1. 相同类型到相同类型,具有相同大小(例如 char 到 char)
  2. 一种类型到另一种类型,大小相同(例如 const char 到 unit8)
  3. 较小的一个变成一个较大的(例如 test[7] 到 test[70])

我的上述方法是这样的 - 例如:

  1. array1 = array2
  2. memcpy(&array2,array1,sizeof(array1))
  3. memcpy可以通过元素进行 for 循环

我希望这里有人可以提供或知道在哪里可以找到不同数组交换例程的精炼示例集合。不是,我不能让它发挥自己的作用,只是,如果解决方案是可靠的,就会有这种持续的不安全感。

哦,我真的很讨厌那些 for 循环,单独分配每个元素。对我来说,使用它们的唯一原因是在执行交换之前需要进行一些额外的处理 - 例如首先增加转移的价值,或类似的东西。

如果这不适合 Q/A 风格,我会很高兴,如果有人可以确认或改进我的尝试,例如 2:

#define SIZEOF_ARRAY = 16;

uint8 array2[SIZEOF_ARRAY+1];
const char array1[SIZEOF_ARRAY+1] = {"test"};

memcpy(&array2,array1,sizeof(array1))
4

1 回答 1

4

首先,您的案例 1 没有意义,您不能复制到const数组。它是恒定的。

然后,对第二种情况的代码进行两个挑剔:

  1. 在这种情况下,数组名称会衰减为指向第一个元素的指针,因此&不需要。
  2. sizeof不是函数,因此不需要括号。

因此:

memcpy(array2, array1, sizeof array2);

请注意,这样做有点危险,您必须确保尺寸确实匹配。

于 2012-11-22T14:57:40.003 回答