【问题标题】:How to make two arrays into a function in c++?如何在c++中将两个数组变成一个函数?
【发布时间】:2009-11-05 20:28:20
【问题描述】:

我有两个字符串数组“Array1[size]”和“Array2[size]”。它们都具有相同的尺寸。 我想编写一个包含这两个数组的函数,但是我在声明它们的方式上遇到了问题。

我是这样声明的:void Thefunction (string& Array1[], string& Array2[], int size);

当我调用它时,我会这样称呼它:Thefunction (Array1, Array2, size);

我做错了什么?

谢谢。

【问题讨论】:

  • 编译器会给你什么错误?
  • 除了以下答案:您应该使用void 而不是Void
  • 谢谢,当我在问题中写它时,这实际上是一个错字。但是我在源代码中写了小写的“void”。无论如何,感谢您指出这一点,因为我不知道小写或大写是否重要。
  • c++ 中的一切都很重要,即使是空格 std::vector<std::pair<int,int>> 也无法编译:/
  • @Matthieu M. - 从 C++0x 开始,这不再是一个问题,大多数现代 C++ 编译器(g++ 4,Visual Studio 2005)都能很好地编译它。

标签: c++ arrays function string


【解决方案1】:

您正在声明一个接受字符串引用数组的函数。您几乎肯定想要获取字符串数组。

像这样:

void TheFunction(string Array1[], string Array2[], int size);

【讨论】:

  • 顺便说一句,标准在第 8 章的某处禁止引用数组。
  • 如果您想按值传递数组(衰减为指向第一个元素的指针),这将是一个解决方案,但仍然使用 Will 解决方案中的指针语法会更清晰:stackoverflow.com/questions/1683367/… .另一方面,如果您想通过引用传递 数组 (并且可以省略 size 参数),请遵循 fnieto 的解决方案:stackoverflow.com/questions/1683367/…
【解决方案2】:
void TheFunction(string* Array1,string* Array2,int size) { ... }

数组衰减自动变成指针。

【讨论】:

  • 事实上,数组是指针(反之亦然)。唯一的区别发生在声明时,函数参数不是声明。
  • @T.E.D:数组是不是指针!当你传递一个数组时,函数接收一个指针。不同之处在于 sizeof() 运算符的结果。
  • @Clifford:不仅 typeof() 的结果不同,而且类型本身也不同。这意味着模板类型扣除会有所不同。
【解决方案3】:

你可以这样做:

template <std::size_t size>
void TheFunction(string (&Array1)[size], string (&Array2)[size]);

【讨论】:

  • +1,这是唯一安全的解决方案,因为编译器会保证传入的数组大小合适。另一方面,它不适用于动态分配的内存。
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2023-01-17
  • 2020-11-19
  • 2021-10-29
相关资源
最近更新 更多