在C++中通过引用传递一组结构

Nat*_*ate 2 c++ arrays

所以我仍然是编程/ C++的新手,并且仍然试图绕过指针并通过引用和所有内容传递.我想弄清楚的一个程序现在需要将一个结构数组传递给另一个函数.我已经通过直接传递数组来实现它.它似乎工作正常.但是,我关心的是我相信我是按值传递它的,并且我理解通过引用传递结构更好,所以你不是每次都复制结构...

无论如何,这是我正在做的一个基本的例子:

struct GoldenHelmet {
    int foo;
    string bar;
    };

void pass (GoldenHelmet ofMambrino[], int size);

int main () {
    GoldenHelmet ofMambrino[10];
    int size = sizeof(ofMambrino) / sizeof(ofMambrino[0]);
    ofMambrino[1].foo = 1;
    pass(ofMambrino, size);
    cout << ofMambrino[2].foo << endl;
    return 0;
}

void pass (GoldenHelmet ofMambrino[], int size) {
    ofMambrino[2].foo = 100;
    ofMambrino[2].bar = "Blargh";
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,它的工作原因是数组已经是指针,对吧?但是我配置的方式,我仍然传递结构的副本和所有东西到pass()函数?我试图通过引用传递它,但它似乎并不想以任何方式工作我尝试过.

Ker*_* SB 6

C++方式:

#include <array>

typedef std::array<GoldenHelmet, 10> Helmets;

void pass(Helmets &);

int main()
{
   Helmets h;
   h[1].foo = 1;
   pass(h);
   //...
}

void pass(Helmets & h)
{
   h[2].foo = 100;
   // ...
}
Run Code Online (Sandbox Code Playgroud)

实际上,我们通过引用传递数组.


Ben*_*ley 5

这个语法:

void pass (GoldenHelmet ofMambrino[], int size)
Run Code Online (Sandbox Code Playgroud)

实际上很混乱.因为您没有传递数组,所以传递指针.它们不是一回事,不要混淆.这种奇怪仅适用于功能参数.以上与此完全相同:

void pass (GoldenHelmet * ofMambrino, int size)
Run Code Online (Sandbox Code Playgroud)

实际上不可能按值传递数组,除非它是另一个对象的子对象.您可以通过引用传递它们,但是您需要包含大小,但是您可以使用模板来执行此操作:

template<int N>
void pass (GoldenHelmet (&ofMambrino)[N])
Run Code Online (Sandbox Code Playgroud)