如果我有以下代码示例:
#include <iostream>
using namespace std;
unsigned char Receive(void){
unsigned char q[4] = {0x0B, 0x0B, 0x0B, 0x0B};
return q;
}
void Transmit(){
unsigned char a[4];
a = Receive();
}
int main()
{
Transmit();
return 0;
}
那么当它们都为无符号字符时,为什么不能将Receive(void)
的返回值分配给变量q?
unsigned char Receive(void){
array<unsigned char, 4> q{{0x0B, 0x0B, 0x0B, 0x0B}}
return q;
}
void Transmit(){
array<unsigned char, 4> a;
a = Receive;
}
答案 0 :(得分:1)
为什么不能将函数的[结果]分配给变量?
因为类型不匹配。该函数返回一个unsigned char
,而变量的类型为unsigned char [4]
。后者不可分配给前者。实际上,什么也不能分配给数组。
答案 1 :(得分:1)
您真的不想返回数组。返回数组会导致编译器制作该数组的副本(这会减慢速度)。
首选方法是传递一个指针:
unsigned char const * Receive()
{
static const unsigned char values[] = {0xf0, 0x0d};
return &values[0];
}
这里的问题是未返回数组的容量。返回指向第一个元素的指针,仅此而已。
您可以传递一个数组,让编译器复制所有元素:
std::array<unsigned char, 4> Receive()
{
std::array<unsigned char, 4> q{{0x0B, 0x0B, 0x0B, 0x0B}};
return q;
}
另一种方法是通过引用传递std::vector
:
void Receive(std::vector<uint8_t>& container)
{
container.push_back(0x08);
container.push_back(0x0B);
//...
}
void Function()
{
std::vector<uint8_t> data;
Receive(data);
//...
}
通过引用传递消除了复制数据结构的需要。该函数直接修改调用方的变量。