Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过引用将数组传递给C++;?_C++_Arrays - Fatal编程技术网

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)传递给函数,并使用它们操纵范围

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



由于您实际上试图将该参数用作“out”参数,因此最好只返回包含结果的
std::vector
std::array
;这更干净。

对数组的引用如下所示:

void f(std::string (&a)[N]) { }
其中,
a
是参数的名称,
N
是数组中的元素数


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

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

  • <> >使用< <代码> STD::向量<代码>或<代码> STD::数组< /代码>,并通过引用传递(也可以在Boost中找到<代码>数组< /代码> pSueDo容器;除非这样,请考虑编写自己的代码。如果您查看升压源代码,它非常简单明了)。
  • 将一对迭代器(begin和end)传递给函数,并使用它们操纵范围

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



由于您实际上试图将该参数用作“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