【问题标题】:C++ pass array to function without copy [duplicate]C ++将数组传递给函数而不复制[重复]
【发布时间】:2020-12-15 11:37:27
【问题描述】:

我是 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() 时,它会复制吗?

【问题讨论】:

  • 1) 没有像 C/C++ 这样的语言。您使用的是,显然是 C++(因为您无法使用 C 编译器编译此类代码)2)是什么让您认为,将 uint8_t* 传递给函数会复制数组?
  • 你知道通过拷贝传递数组的方法吗?
  • 您的示例中没有数组。您正在使用指针。
  • @easy_breezy "我只是想知道这是正确的方法,因为我是 C++ 新手 "在 C++ 中,如果你想要静态大小的数组,你会使用std::array,如果你想使用动态大小的数组,你可以使用std::vector,并传递对它们的引用。
  • @easy_breezy int x[10]; 那是一个数组。如果你想知道如何通过它,那么 C++ 比 C 有更多的答案。

标签: c++ arrays c pointers


【解决方案1】:

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

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

然后按值传递指针

someFunction(array);

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

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

【讨论】:

  • “数组的大小需要固定,因此您将无法动态分配它们”不清楚您的意思。数组可以动态分配。此外,使用new 的建议至少应该附带std::vectorstd::array 的提示。在现代 C++ 中,应该避免使用原始 new
  • @idclev463035818 因为他是 C++ 新手,所以我不想在这个答案中提供太多信息,但我可以根据您的批评进行调整。
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 2021-03-10
  • 2018-01-13
  • 1970-01-01
  • 2014-01-10
  • 2011-06-13
  • 2017-07-15
  • 1970-01-01
相关资源
最近更新 更多