传递动态数组对象以实现功能

时间:2015-03-04 17:29:06

标签: c++ arrays function

我正在学习c ++。所以我知道一种方法,通过它你可以发送一些东西来运行,然后像按值调用一样工作,但实际上是通过引用调用。例如

void myFUNC(string& x)

现在,我有一个动态创建的对象数组。我想传递数组以像上面的方法一样运行。这是代码片段

City *p = new City[number]; // pointer to dynamic array of class objects

//function prototype
void list_cities(int number, City p[]){
    for(int i=0; i<number; i++){
        cout<<p[i].get_name()<<endl;
    }
}

3 个答案:

答案 0 :(得分:2)

令人困惑的是,看起来像数组City p[]的函数参数实际上是一个指针,相当于City * p。因此,您只需将指针传递给动态数组:

list_cities(number, p);

也就是说,更喜欢像std::vector<City>这样的友好类型,所以你不必耍弄指针,小心避免内存泄漏,更糟糕。

答案 1 :(得分:1)

使用std::vector您还可以执行以下操作:

void list_cities(std::vector<City> &cities)
{
    for (size_t iCity = 0; iCity < cities.size(); iCity++){
        cout << cities[iCity].get_name() << endl;
    }
}

std::vector<City> cities;
// fill list here
list_cities(cities);

答案 2 :(得分:0)

默认情况下 转换为指针,然后将其作为参考传递。因此,没有规定显式通过引用传递数组。也就是说,

void list_cities(int number, City &p[])

不是p[]作为参考传递,而是使p[]成为引用数组。

代码:

void list_cities(int number, City p[])
{
    for(int i=0; i<number; i++)
    {
        cout<<p[i].get_name()<<endl;
    }
}

int main()
{
    City *p = new City[number];
    list_cities(number,p);
    delete[] p;
}