c++结构初始化数组

C++ Array of struct initialization

本文关键字:数组 初始化 结构 c++      更新时间:2023-10-16

我真的不习惯在c++中编码,这可能是一个简单的问题,我无法得到正确的语法。

我基本上想要实现的是,从一个方法中,我声明一个结构数组(大小未指定),我调用一个方法,我传递这个数组。该方法应该初始化数组的值。我试图得到一个简单的代码工作,但得到错误。下面这段代码给了我一个编译错误。有人能指出如何做到这一点吗?

struct ABC
{
int a;
int b;
};
void test(ABC * a)
{
a[] = {{2,3},{4,5}};
}
int main() {
    ABC arr[2];
    test(arr);
}     
编辑:


下面的工作,但我希望初始化工作在一行。

struct ABC
{
int a;
int b;
};
void test(ABC *a)
{
a[0].a = 2;
a[0].b = 3;
a[1].a = 4;
a[1].b = 5;
}
int main() {
    ABC arr[2];
    test(arr);
}

您可以使用这样的设置,利用c++标准库。用-std=c++11标志编译它以允许我在push_back中所做的初始化:

#include <vector>
#include <iostream>
struct ABC
{
    int a;
    int b;
};
void test(std::vector<ABC>& a)
{
    a.push_back({2,3});
    a.push_back({4,5});
}
int main()
{
    std::vector<ABC> arr;
    test(arr);
    // Test the outcome...
    std::cout << "The size is: " << arr.size() << std::endl;
    for (ABC& a : arr)
        std::cout << "Element (" << a.a << "," << a.b << ")" << std::endl;
    return 0;
}

初始化a数组中访问其索引的每个结构

void test(ABC * a)
{
    a[0] = {2,3};
    a[1] = {4,5};
    ...

这样{{2,3},{4,5}};将在初始化时工作,即

ABC arr[2] = {
    {2,3},
    {4,5}
};

您必须首先找出数组的实际大小,然后进行迭代以初始化它。

不工作,见下文

void test(ABC* a) {        
    int value=2;
    for (int i=0;i++;i<sizeof(a)/sizeof(ABC)) {
        a[i].a=value;
        a[i].b=value+1;
        value+=2; } }

我不能100%确定sizeof(a)会给你数组的大小。如果这不起作用,则必须将数组的大小作为参数传递:

void test(ABC* a, int elements) {        
    int value=2;
    for (int i=0;i++;i<elements) {
        a[i].a=value;
        a[i].b=value+1;
        value+=2; } }
int main() {
    ABC arr[2];
    test(arr,2); }