指向数组强制转换的数组指针-C/C++;新手
我有一个数组:指向数组强制转换的数组指针-C/C++;新手,c,arrays,pointers,casting,C,Arrays,Pointers,Casting,我有一个数组: unsigned char data[dataLength]; 和一个函数: unsigned char* get_data(int length) 我想把函数的返回值赋给变量 当我直接做的时候 data = get_data(length); 编译器正在抱怨: 将“unsigned char*”赋值给“unsigned char[((sizetype)((ssizetype)frameLength)+-1))+1]”时的类型不兼容 它与memcpy一起工作: memcpy
unsigned char data[dataLength];
和一个函数:
unsigned char* get_data(int length)
我想把函数的返回值赋给变量
当我直接做的时候
data = get_data(length);
编译器正在抱怨:
将“unsigned char*”赋值给“unsigned char[((sizetype)((ssizetype)frameLength)+-1))+1]”时的类型不兼容
它与memcpy一起工作:
memcpy(data, get_data(dataLength), dataLength);
但我不想再复制数据了
有人能帮忙吗?在C中,这是通过参数传递实现的:
void get_data (int length, unsigned char data[length]);
称为:
get_data(dataLength, data);
函数中的数据
现在将与调用者中分配的对象相同。无需复印,无需记忆
数据
是堆栈分配的数组。虽然数组在作为函数参数传递时会衰减为指针,但它们不是指针,您无法为其分配指针李>
get_data()
)返回原始指针不是一个好主意,因为不清楚应该释放谁以及如何释放它memcpy
。如果要重用现有缓冲区并避免新的分配,请通过非常量引用传递它(请参见Lundin的答案)
//1。
std::数组get_data();
自动数据=获取数据();
// 2.
std::数组数据;
void get_数据(std::array&);
获取_数据(数据);
// 3.
std::向量get_数据(int长度);
自动数据=获取数据(长度);
// 4.
std::矢量数据;
void get_数据(std::vector&data,int-length);
获取_数据(数据、长度);
复制/粘贴代码时,您似乎犯了一些错误。它是数据
还是帧
?是getData()
还是getu data()
?请尝试创建一个独立的例子:当然,谢谢。你不能避免复制,<代码>数据< /C>不是指针,而是一个在堆栈上分配的缓冲区,你不能给它指派一个指针。如果是C++,只需返回<代码> STD::向量< /代码>。你不能分配给一个数组。而且,数组不是指针,指针也不是数组。通过这样做,就你试图解决的问题提出一个新问题。(问你正在编程的语言。C和C++非常不同。)
// 1.
std::array<unsigned char, dataLength> get_data();
auto data = get_data();
// 2.
std::array<unsigned char, dataLength> data;
void get_data(std::array<unsigned char, dataLength>&);
get_data(data);
// 3.
std::vector<unsigned char> get_data(int length);
auto data = get_data(length);
// 4.
std::vector<unsigned char> data;
void get_data(std::vector<unsigned char>& data, int length);
get_data(data, length);