int led_p1[8] = {0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};
int led_p2[8] = {0x81, 0x42, 0x24, 0x18,
0x18, 0x24, 0x42, 0x81};
int led_p3[8] = {0xFF, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0x00};
int led_pattern[8] = {};
int pattern_idx = 0;
// select pattern for now
switch(pattern_idx)
{
case 0:
led_pattern = led_p1;
pattern_idx++;
break;
case 1:
led_pattern = led_p2;
pattern_idx++;
break;
case 2:
led_pattern = led_p3;
pattern_idx = 0;
break;
}
我尝试了上面的操作,我将循环idx,将一个新序列复制到led_pattern,然后循环,返回,获取下一个。
我在这里找到了一个使用向量传递整个数组的方法; C++: copy array
但是矢量(我相信)不适用于我正在使用的编译器(avr-gcc / c ++)
如何在C ++中实现这一点?我知道在python中下面会工作,我可以将一个数组分配给另一个变量,并“克隆”它。
由于
答案 0 :(得分:4)
你真的需要复制到led_pattern
吗?你要改变内容吗?如果它本质上是const,为什么不将led_pattern
声明为指向int的指针?这样会更有效率,因为你只是指向三个现有数组中的一个而不是复制它们。
如果没有,请使用memcpy
从三个阵列中的一个复制到led_pattern
答案 1 :(得分:3)
替换不符合您要求的行:
led_pattern = led_p1;
根据偏好的降序排列任何一个。
std::copy(led_p1, led_p1 + 8, led_pattern);
memcpy(led_pattern, led_p1, sizeof led_p1);
for(int i = 0; i < 8; i++) led_pattern[i] = led_p1[i];
答案 2 :(得分:3)
如果我正确读取OP,您不需要深层复制,但想要切换用于LED的阵列。所以你会创建一个可以在数组之间切换的指针,如下所示:
int led_p1[8] = {0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};
int led_p2[8] = {0x81, 0x42, 0x24, 0x18,
0x18, 0x24, 0x42, 0x81};
int led_p3[8] = {0xFF, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0x00};
int *led_pattern = led_p1; //Starting point
int pattern_idx = 0;
// select pattern for now
switch(pattern_idx)
{
case 0:
led_pattern = led_p1;
pattern_idx++;
break;
case 1:
led_pattern = led_p2;
pattern_idx++;
break;
case 2:
led_pattern = led_p3;
pattern_idx = 0;
break;
}
现在,您可以切换led_pattern
以指向您当前使用的led_p*
数组。
答案 3 :(得分:2)
通常的方法是使用std :: copy()。 std :: copy需要两个迭代器来表示要复制的序列的开始和结束,第三个参数作为目标:
std::copy( &led_p1[ 0 ], &led_p1[ sizeof(led_p1) / sizeof(led_p1[ 0 ]) ], &led_pattern[ 0 ])
表达式sizeof(led_p1)/ sizeof(led_p1 [0])的计算结果为8,即数组中的元素数。您可以使用包含3个数组的数组并迭代这3个数组,而不是使用3个不同的数组和LED模式。
答案 4 :(得分:1)
要进行深层复制,必须将第一个数组中的每个值复制到新数组中。不要只是将旧指针指定给新指针,而是对数组中元素的数量进行for循环,并将每个指针分配给新副本。
答案 5 :(得分:1)
要在内存级别制作硬拷贝,您可能需要使用旧的C函数:memcpy
memcpy (led_pattern,led_p1, 8 * sizeof(int));
8
如果不同,则应替换为数组大小。
功能说明: www.cplusplus.com/reference/clibrary/cstring/memcpy /
#include <string.h>
也应该被使用。(编辑为Prætorian说)