结构或类中的数组初始化

Posted

技术标签:

【中文标题】结构或类中的数组初始化【英文标题】:Array initialization within a structure or class 【发布时间】:2015-07-09 06:46:38 【问题描述】:

我只是在学习结构和类。我创建了一个示例结构来熟悉它并尝试在其中初始化一个数组。当我编译程序时它给了我错误

error: expected ‘:’, ‘,’, ‘;’, ‘’ or ‘__attribute__’ before ‘=’ token
char arr[5] = 2,3,8,67,87;

struct abc
char a;
char b;
char c;

char arr[5] = 2,3,8,67,87;
;  

struct abc xyz[5]; 

在声明结构和类时不允许数组初始化吗?

【问题讨论】:

我相信CC++可能有不同的规则......选择一个。 即使你选择 C++,也要提到版本,因为它与答案有关。 我只是想知道这是否可能。任何版本的 C++ 都允许这样做。 选择一种单一语言。是的,C++ 从 C++11 开始就允许这样做。 好的,因为您坚持使用一种语言进行标记(无需等待适用于两种语言的答案),您的代码在 C++ 中运行良好,因为 C++11。见this example。 【参考方案1】:

我猜在 C 中你可以这样做:

struct abc
char a;
char b;
char c;

char arr[5];
;  

struct abc test=  5, 2, 3,  'a', 'b', 'c', 'd', 'e'  ;

【讨论】:

这是 c99 中的声明风格。使用它是否明智?【参考方案2】:

在 C 中,您不能在结构定义中初始化结构的成员。当您声明该结构的变量时,您必须这样做。在 C++ 中,您可以将其作为构造函数的一部分。

【讨论】:

我认为我们不能在结构声明期间初始化成员,而不是定义,结构定义意味着为它分配空间并为其成员赋予一些价值。 @Subhajit 可以在结构定义中指定成员的值,以便在实例化结构时(在 C++ 中)成员获取这些值 @ juanchopanza,是的,我认为在 c++ 中这是可能的,但定义和实例化是相同的,我猜你的意思是结构声明 @Subhajit 我指的是结构类型的定义——它的主体。【参考方案3】:

struct 中不允许完成数组初始化,但您可以在没有内容的情况下初始化数组的名称和类型。 在c++中

struct student
int age;
string name;
int scoreOf4subject[4];   
; 

当您需要在数组中设置 4 个主题的值时,它会是这样的:

student keny;   
keny.scoreOf4subject=90,91,94,93;

【讨论】:

在 C++ 中,你可以做 OP 正在做的事情。见here。

以上是关于结构或类中的数组初始化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自定义值初始化模板类中的数组?

用虚函数初始化结构

c语言,结构体数组怎么初始化

C语言结构体数组的初始化

java类中构造函数中:数组怎样初始化

从 GLSL 中的数组初始化结构