c++ - 对象数组,C++

标签 c++ pointers function parameters

我有两个类,即 FlightRunway。现在我试图将这些对象的数组作为参数传递给函数。

void fun(Flight ptr1[],Runway ptr2[])
{
...
...
}

ptr1 应指向 Flight 对象数组,ptr2 应指向 Runway 对象数组。 现在在这个函数 fun() 中,我如何访问这些类的成员。我还可以使用 ptr1++ 或 ptr2++ 在对象之间移动吗? 另外我怎么称呼这个功能??像这样的东西 -

Flight array1[5];
Runway array2[2];
fun(array1,array2);

最佳答案

void fun(Flight ptr1[],Runway ptr2[])

被解释为

void fun(Flight *ptr1, Runway *ptr2)

这叫“分解”,我觉得很烂。主要是为了向后兼容C的一个特性。如果你要指针,指定指针,而不是数组,因为指针和数组是不同的东西。

你也可以这样做

void fun(Flight (&arr1)[5], Runway (&arr2)[7])

现在函数中的参数仍然是数组,而不是指针,所以 ++ arr1 是非法的并且 sizeof arr1/sizeof arr1[0]5。调用函数时的参数数组也必须是正确的大小,分别恰好为 5 和 7。在此上下文中,& 表示按引用传递,因此调用函数时不会复制数组。

您还可以利用模板系统为任何大小的参数数组生成函数:

template< size_t NF, size_t NR >
void fun(Flight (&arr1)[NF], Runway (&arr2)[NR])

这样的模板可以用任何大小的数组调用,NF 和 NR 将是设置为适当大小的整数常量。

关于c++ - 对象数组,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969063/

相关文章:

c++ - 递增迭代器超出范围

vb.net - 如何在 VB.NET 中将十六进制偏移量转换为两字节指针?

c++ - 使用 std::unique 时如何防止悬空指针?

c - 从C中的指针检索二维数组

javascript - 如何在 React Native 应用程序中预填充 TextInput?

css - 使用颜色操作的 Sass 函数

c++ - OpenGL程序可编译但无法正确启动

C++ 类的静态成员在构造函数之后初始化

c++ - 优化字符串数组中最宽字符串的查找?

C++函数指针和成员函数指针