首页 > 解决方案 > C ++将数组传递给函数而无需复制

问题描述

我是 C/C++ 新手,我想知道将数组传递给函数而无需复制的正确方法是什么,例如:

void someFunction(uint8_t &array) {
    // some work here
}

int main() {
    uint8_t *array = (uint8_t*) malloc(sizeOf(uint8_t) * 100);
    someFunction(*array);
}

这种方式是否正确,当我将数组传递给 someFunction() 时,它是否会复制?

标签: c++arrayscpointers

解决方案


你混淆了一些术语。您没有传递数组,而是传递对分配数据的引用。数组的大小需要固定,因此您将无法动态分配它们(编辑:我的意思是您不能在不知道编译时大小的情况下将它们分配到堆栈上)。这里更简单的方法是更改​​函数的签名以接受指针

void someFunction(uint8_t *array) { /* ... */ }

然后按值传递指针

someFunction(array);

我还建议您使用为在 C++ 中分配此类数据而设计的newanddelete[]运算符,但这不是这个问题所必需的。

编辑: 当然,更安全的方法是使用std::vector动态长度数据的std::array类和静态长度数据的类。


推荐阅读