c++ - 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() 时,它是否会复制?
解决方案
你混淆了一些术语。您没有传递数组,而是传递对分配数据的引用。数组的大小需要固定,因此您将无法动态分配它们(编辑:我的意思是您不能在不知道编译时大小的情况下将它们分配到堆栈上)。这里更简单的方法是更改函数的签名以接受指针
void someFunction(uint8_t *array) { /* ... */ }
然后按值传递指针
someFunction(array);
我还建议您使用为在 C++ 中分配此类数据而设计的new
anddelete[]
运算符,但这不是这个问题所必需的。
编辑:
当然,更安全的方法是使用std::vector
动态长度数据的std::array
类和静态长度数据的类。
推荐阅读
- bitbake - /dev/fd/ 套接字或管道链接失败,没有丢失 /dev/fd 链接
- python-2.7 - 在用户资源对象上接收 keyError: 'deletionTime'
- apache-spark - 压缩火花输出文件
- r - 使用许多特殊字符将 R 连接到 HANA db 的问题
- rsyslog - rsyslog 服务器生成以 IP 地址而不是 access_log 命名的日志文件
- postgresql - 如何根据用户查询数据在视图中设置动态“位置”?
- python - 使用 Python 将两个 CSV 文件与案例合并
- javascript - Angular Tooltip 显示在错误的 Ag-Grid 单元格上
- flutter - 在 setState 更改流后 StreamBuilder 不会重建
- reactjs - 在反应应用程序中更新反应脚本后出错