给函数 void main() 和 void hello(byte* a[4])。主函数有一个四个字节的数组。数组的引用需要传递给函数 hello 进行操作。我希望正确的语法是:
void hello(byte* a[4]){
// Manipulate array
a[0] = a[0]+1;
}
void main(){
byte stuff[4] = {0,0,0,0};
hello(&stuff);
// hopefully stuff is now equal {1,0,0,0}
}
或者,我看到其他人使用这种形式的声明:
void hello(byte (&a)[4])
这是正确的方法吗?
原文由 Peter Savnik 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里有很多不同的选项,这取决于你想在这里做什么。
如果你有一个
byte
对象的原始数组,你可以将它传递给这样的函数:数组传递给函数的机制(指向数组第一个元素的指针传递给函数)的功能类似于传递引用:您对
arr
所做的任何更改hello
将坚持main
即使您没有明确传递对它的引用。但是,hello
函数不会检查数组是否大小为 4 - 它会将 任意 字节数的数组作为输入。你也可以写
语法
byte (&arr)[4]
表示“对四个字节数组的引用”。这通过引用显式地将数组传递到hello
,它将检查数组的大小以确保它是正确的。但是,这是非常不寻常的语法,在实践中很少见。但也许最好的办法是不使用原始数组,而是使用
std::array
:现在,对于字节数组的语法中的奇怪括号没有什么奇怪的了,也不必担心大小检查。一切都得到了妥善处理,因为
std::array
是一种对象类型,它具有常规对象类型的所有优点。我建议在所有其他方法之上使用最后一种方法。