gpt4 book ai didi

c++ - 如何通过引用 C++ 中的函数来传递数组?

转载 作者:行者123 更新时间:2023-11-30 00:59:28 27 4
gpt4 key购买 nike

我有以下程序,其中两个变量将通过引用传递给一个函数,在返回到 main() 之前,它们的值将根据外部因素确定,以便可以使用它们通过其他功能。我尝试传递的第一个变量是一个 int,这没问题,但另一个是字符串数组,这给我带来了一些问题。

我对此做了足够的研究,知道你不能有数组或引用(尽管我还没有弄清楚为什么),我想知道是否有人可以帮助我弄清楚如何做到这一点?我尝试过的各种方法都导致了段错误

注意:下面的代码让数组按值传递,因为我只是不知道要为它写什么。

更新:我的类(class)作业需要使用数组。其他一些数据结构,例如建议的 vector,会很好,但我必须使用特定的结构。

void initialise_existing_devices(int& no_of_existing_devices, string existing_devices[100]);

int main()
{
int no_of_existing_devices = 0;
string existing_devices[100];

initialise_existing_devices(no_of_existing_devices, existing_devices[100]);
}

void initialise_existing_devices(int& no_of_existing_devices, string existing_devices[100])
{
string line;
ifstream DeviceList;
DeviceList.open("devices/device_list");
while (true)
{
getline(DeviceList, line, '\n');
if (DeviceList.eof())
{
break;
}
++ no_of_existing_devices;
}
DeviceList.close();

DeviceList.open("devices/device_list");
for (int i = 0; i < no_of_existing_devices; i ++)
{
getline(DeviceList, line, '\n');
existing_devices[i] = line;
}
}

最佳答案

对数组的引用如下所示:

void f(std::string (&a)[N]) { }

哪里a是参数的名称,N是数组中元素的数量。


但是,通常在 C++ 中您不会通过引用传递数组(您可以;只是不常见)。其他选项包括:

  • 传递一个指向数组初始元素的指针;在这种情况下,考虑将数组的大小作为第二个参数传递给函数。

  • 使用 std::vector<std::string>std::array<std::string, N>相反,并通过引用传递它(您还可以在 Boost 中找到 array 伪容器;除此之外,请考虑编写您自己的容器。如果您查看 Boost 源代码,它非常简单明了)。

  • 将一对迭代器(开始和结束)传递给函数并使用它们来操作范围。

最后一个选项是最惯用的 C++ 方法;它也是最通用的,因为您可以使用任何类型的容器,包括数组、标准库容器或您自己编写的容器。


由于您实际上是在尝试将该参数用作“输出”参数,因此最好只返回 std::vector<string>std::array<string, 100>包含结果;这样就干净多了。

关于c++ - 如何通过引用 C++ 中的函数来传递数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261919/

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