C++ 如何通过引用将数组传递给C++;?
我有以下程序,其中两个变量通过引用传递给一个函数,在返回到C++ 如何通过引用将数组传递给C++;?,c++,arrays,C++,Arrays,我有以下程序,其中两个变量通过引用传递给一个函数,在返回到main()之前,它们的值将根据外部因素确定,以便其他函数可以使用它们。我试图传递的第一个变量是int,这很好,但另一个是字符串数组,这给我带来了一些问题 我对此做了足够多的研究,知道你不能拥有数组或引用(尽管我还没有弄清楚原因),我想知道是否有人能帮我弄清楚如何做到这一点?我尝试过的各种方法都导致了分段错误 NB:下面的代码将数组按值传递,因为我不知道该为它编写什么 更新:我的课程作业需要使用数组。其他一些数据结构,比如已经建议的向量,
main()
之前,它们的值将根据外部因素确定,以便其他函数可以使用它们。我试图传递的第一个变量是int
,这很好,但另一个是字符串数组,这给我带来了一些问题
我对此做了足够多的研究,知道你不能拥有数组或引用(尽管我还没有弄清楚原因),我想知道是否有人能帮我弄清楚如何做到这一点?我尝试过的各种方法都导致了分段错误
NB:下面的代码将数组按值传递,因为我不知道该为它编写什么
更新:我的课程作业需要使用数组。其他一些数据结构,比如已经建议的向量
,会很好,但我必须使用特定的结构
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初始化现有设备(现有设备的int和no,字符串现有设备[100]);
int main()
{
现有设备的int no_=0;
字符串现有_设备[100];
初始化现有设备(无现有设备,现有设备[100]);
}
无效初始化现有设备(现有设备的int和no,字符串现有设备[100])
{
弦线;
ifstream魔鬼主义者;
设备列表打开(“设备/设备列表”);
while(true)
{
getline(设备列表,行'\n');
if(DeviceList.eof())
{
打破
}
++现有设备的数量;
}
魔鬼主义者;
设备列表打开(“设备/设备列表”);
对于(int i=0;i<现有设备的数量;i++)
{
getline(设备列表,行'\n');
现有_装置[i]=线路;
}
}
对数组的引用如下所示:
void f(std::string (&a)[N]) { }
其中,a
是参数的名称,N
是数组中的元素数
但是,通常在C++中,你不会通过引用传递一个数组(你可以;它只是不常见)。其他选择包括:
- 传递指向数组初始元素的指针;在这种情况下,考虑将数组的大小作为第二个参数传递给函数。 <> >使用< <代码> STD::向量<代码>或<代码> STD::数组< /代码>,并通过引用传递(也可以在Boost中找到<代码>数组< /代码> pSueDo容器;除非这样,请考虑编写自己的代码。如果您查看升压源代码,它非常简单明了)。
- 将一对迭代器(begin和end)传递给函数,并使用它们操纵范围
由于您实际上试图将该参数用作“out”参数,因此最好只返回包含结果的
std::vector
或std::array
;这更干净。对数组的引用如下所示:
void f(std::string (&a)[N]) { }
其中,a
是参数的名称,N
是数组中的元素数
但是,通常在C++中,你不会通过引用传递一个数组(你可以;它只是不常见)。其他选择包括:
- 传递指向数组初始元素的指针;在这种情况下,考虑将数组的大小作为第二个参数传递给函数。 <> >使用< <代码> STD::向量<代码>或<代码> STD::数组< /代码>,并通过引用传递(也可以在Boost中找到<代码>数组< /代码> pSueDo容器;除非这样,请考虑编写自己的代码。如果您查看升压源代码,它非常简单明了)。
- 将一对迭代器(begin和end)传递给函数,并使用它们操纵范围
由于您实际上试图将该参数用作“out”参数,因此最好只返回包含结果的
std::vector
或std::array
;这要干净得多。这一行没有达到您的期望:
initialise_existing_devices(no_of_existing_devices, existing_devices[100])
提示:数组索引,100
我建议您使用std::vector
而不是数组,并通过引用传递该数组
编辑:好的,鉴于更新:
你能使用结构吗?如果是这样,您可以将数组包装在结构中
:
struct string_array
{
string data[100];
};
然后在main中定义一个实例,并通过引用传递它?我相信您可以填写详细信息:) 这一行没有达到您的预期:
initialise_existing_devices(no_of_existing_devices, existing_devices[100])
提示:数组索引,100
我建议您使用std::vector
而不是数组,并通过引用传递该数组
编辑:好的,鉴于更新:
你能使用结构吗?如果是这样,您可以将数组包装在结构中
:
struct string_array
{
string data[100];
};
然后在main中定义一个实例,并通过引用传递它?我相信您可以填写详细信息:) 对于堆管理的数组,应该使用std::vector
;对于基于堆栈的数组,应该使用boost::
/std::array
。这些对象将保持它们自己的大小。对于堆管理的数组,应该使用std::vector
,对于基于堆栈的数组,应该使用boost::
/std::array
。这些对象将保持它们自己的大小。对于实际参数,只使用表示数组地址的数组名称:
initialise_existing_devices(no_of_existing_devices, existing_devices);
void initialise_existing_devices(int& no_of_existing_devices, string existing_devices[])
对于参数,使用th