为什么我不能为变量赋值函数?



如果我有以下代码示例:

#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;
}

为什么我不能将函数的[结果]分配给变量?

因为类型不匹配。该函数返回一个unsigned char,而变量的类型是unsigned char [4]。后者不能与前者一起分配。事实上,不能将任何内容分配给数组。

你真的不想返回数组。 返回数组会导致编译器复制数组(这会减慢速度(。

首选方法是传递指针:

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);
//...
}

通过引用传递,无需复制数据结构。 该函数直接修改调用方的变量。

最新更新