在函数中传递显式char数组?

时间:2016-03-11 13:43:42

标签: c++ arrays function char explicit

我有一个char数组

char theArray[] = { 0xAA, 0x01, 0x27, 0x08 };

我正常传递数组

myFunction(theArray)

但我有其他几个显式数组初始化。当我尝试做一个

myFunction({ 0xAA, 0x01, 0x27, 0x08 })

编译器说:

  

错误:标量初始值设定项中的多余元素

如何直接传递我的显式数组?

2 个答案:

答案 0 :(得分:4)

最简单的方法是使用<div text-editordir></div> 代替std::array<unsigned char,4>数组:

char[]

Live Demo

为什么#include <array> void myFunction(const std::array<unsigned char,4>& theArray) { } int main() { myFunction({{ 0xAA, 0x01, 0x27, 0x08 }}); myFunction({{ 0xAA, 0x01, 0x27, 0x08 }}); }

unsigned char不适合0xAA,会出现编译错误。

为什么signed char

因为您将从初始化列表中获取rvalue,所以只能将其作为const引用传递,或者复制到by value参数。

答案 1 :(得分:-4)

答案取决于你的意思&#34;直接传递我的显式数组&#34;。

当你说你有一个char数组时:

char theArray[] = { 0xAA, 0x01, 0x27, 0x08 };

您正在声明堆栈上的数组。当它超出范围时,内存被释放。

在函数内部无法分辨内存的分配方式。因此,即使不了解更多关于函数的信息,我们也可以推断,如果你传递char theArray[] = { 0xAA, 0x01, 0x27, 0x08 };并且函数没有释放内存,那么我们永远不会指望它会通过另一个仍然传递指针的调用来实现。

必须将内存分配给某些内容,并且不允许使用语法myFunction(new char[]{0xAA,0x01,0x27,0x08 });

但是如果我们使用智能指针,我们可以做一行:

myFunction(std::unique_ptr<char[]>{new char[4]{0xAA,0x01,0x27,0x08}}.get());