use*_*421 3 c c++ arrays if-statement initialization
我希望数组根据条件具有两个不同的值。我可以用我想要的值初始化条件内的数组。
if (myCondition == 0)
{
byte my_message[8] = {0x00, 0xAB, 0xEE, 0xFF, 0x00, 0x01, 0x0A, 0x0B};
}
else if (myCondition == 1)
{
byte my_message[8] = {0x11, 0xA1, 0xBC, 0x71, 0x00, 0x02, 0x94, 0x10};
}
Run Code Online (Sandbox Code Playgroud)
先前方法的问题是数组具有本地范围,并且下面的代码无法“看到”它。
如果我尝试在条件之外声明数组:
byte my_message[8];
Run Code Online (Sandbox Code Playgroud)
然后,在条件内,我不能使用以前的方式一次性初始化整个数组。
数据中没有模式,因此我可以for
在条件内使用循环,以便轻松地为数组的每个元素赋予值。
除了麻烦之外,还有一种给数组赋值的方法吗:
if (myCondition == 0)
{
my_message[0] = {0x00};
my_message[1] = {0xAB};
my_message[2] = {0xEE};
....
}
Run Code Online (Sandbox Code Playgroud)
在 C 中,您可以按memcpy
以下方式使用标准函数和复合文字
byte my_message[8];
if (myCondition == 0)
{
memcpy( my_message, ( byte [] ){0x00, 0xAB, 0xEE, 0xFF, 0x00, 0x01, 0x0A, 0x0B}, 8 * sizeof( byte ));
}
else if (myCondition == 1)
{
memcpy( my_message, ( byte[] ){0x11, 0xA1, 0xBC, 0x71, 0x00, 0x02, 0x94, 0x10}, 8 * sizeof( byte ) );
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,最好使用std::array
原始数组来代替。例如
std::array<byte, 8> my_message;
if (myCondition == 0)
{
my_message = {0x00, 0xAB, 0xEE, 0xFF, 0x00, 0x01, 0x0A, 0x0B};
}
else if (myCondition == 1)
{
my_message = {0x11, 0xA1, 0xBC, 0x71, 0x00, 0x02, 0x94, 0x10};
}
Run Code Online (Sandbox Code Playgroud)
或者,如果要使用原始数组,那么如果编译器支持 C++ 20,那么您可以按以下方式使用基于范围的 for 循环
byte my_message[8];
if (myCondition == 0)
{
for ( auto *p = my_message; auto item : {0x00, 0xAB, 0xEE, 0xFF, 0x00, 0x01, 0x0A, 0x0B} )
{
*p++ = item;
}
}
else if (myCondition == 1)
{
for ( auto *p = my_message; auto item : {0x11, 0xA1, 0xBC, 0x71, 0x00, 0x02, 0x94, 0x10} )
{
*p++ = item;
}
}
Run Code Online (Sandbox Code Playgroud)
否则,如果编译器不支持 C++ 20,则此声明
auto *p = my_message;
Run Code Online (Sandbox Code Playgroud)
必须移出基于 for 循环的范围。
归档时间: |
|
查看次数: |
629 次 |
最近记录: |