gpt4 book ai didi

C++ 将对数组的引用传递给函数

转载 作者:太空狗 更新时间:2023-10-29 20:35:00 24 4
gpt4 key购买 nike

赋予函数 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])

这是正确的做法吗?

最佳答案

这里有许多不同的选项,具体取决于您要在此处执行的操作。

如果你有一个 byte 的原始数组对象,您可以将其传递给这样的函数:

void hello(byte arr[]) {
// Do something with arr
}

int main() {
byte arr[4];
hello(arr);
}

将数组传递给函数的机制(指向数组第一个元素的指针传递给函数)的功能类似于按引用传递:您对 arr 所做的任何更改。在 hello会坚持 main即使您没有明确传递对它的引用。然而,hello函数不会检查数组的大小是否为四 - 它会将 任何 字节数的数组作为输入。

你也可以这样写

void hello(byte (&arr)[4]) {
// ...
}

int main() {
byte arr[4];
hello(arr);
}

语法 byte (&arr)[4]表示“对四个字节数组的引用”。这通过引用显式地将数组传递给 hello ,它会检查数组的大小以确保它是正确的。然而,这是非常不寻常的语法,在实践中很少见。

但也许最好的办法是不使用原始数组,而是使用 std::array相反:

void hello(std::array<byte, 4>& arr) {
// Do something with arr
}

int main() {
std::array<byte, 4> arr;
hello(arr);
}

现在,在字节数组的语法中没有关于奇怪括号的奇怪之处,也不用担心大小检查。一切都得到妥善处理,因为std::array是一种对象类型,具有常规对象类型的所有优点。我建议在所有其他方法之上使用最后一种方法。

关于C++ 将对数组的引用传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45220976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com