有没有办法仅用其变量制作结构数组?例如,代替使用此:
struct Employee
{
int age;
char name[50];
int salary;
};
struct Employee Employees[4];
Employees[4] = {
{25, "Suresh", 25000},
{24, "Tutorial", 28000},
{22, "Gateway", 35000},
{27, "Mike", 20000}
};//example I found
我想使用已经填充了结构数组的结构变量。
我从上面的例子开始,遇到错误expected expression before '{' token
使用以下代码:
struct patients p1;
struct patients p2;
struct patients p3;
struct patients p4;
struct patients patientsArray[4];
/*patient 1 specification */
p1.id=1;
p1.severity=2;
p1.firstName="Joe";
p1.lastName="Curcio";
p1.state="Patient has arrived";
p1.time_spent = 0;
/*patient 2 specification */
p2.id=2;
p2.severity=3;
p2.firstName="Sam";
p2.lastName="Washington";
p2.state="Patient has arrived";
p2.time_spent = 0;
/*patient 3 specification */
p3.id=3;
p3.severity=5;
p3.firstName="Mary";
p3.lastName="Smith";
p3.state="Patient has arrived";
p3.time_spent = 0;
/*patient 4 specification */
p4.id=4;
p4.severity=3;
p4.firstName="Joal";
p4.lastName="Blackwell";
p4.state="Patient has arrived";
p4.time_spent = 0;
patientsArray[4]={p1,p2,p3,p4};
答案 0 :(得分:2)
您需要做的就是删除数组声明中的括号。
所以就像patientsArray[4]={p1,p2,p3,p4};
另一件事是“必须在初始化数组之前将值分配给p1,p2,p3,p4”
或将此代码行放在下面。
答案 1 :(得分:2)
最简单的解决方案是使用:
struct patients* patientsArray[4] = {&p1, &p2, &p3, &p4};
这将允许您在填充结构之前初始化数组(如代码所示),最后得到所需的结果。唯一的区别是,您将必须使用->
而非.
来访问数组中的项目。
另一个选择是使用:
struct patients patientsArray[4];
struct patients* p1 = &patientsArray[0];
struct patients* p2 = &patientsArray[1];
struct patients* p3 = &patientsArray[2];
struct patients* p4 = &patientsArray[3];
除了您的数组包含结构并且您的单个对象是指针之外,这个想法通常是相同的。
如果您必须将所有内容都保留为struct
并且不能使用指针,那么您可能需要执行以下操作:
struct patients p1;
struct patients p2;
struct patients p3;
struct patients p4;
struct patients patientsArray[4];
// Initialize individual objects
p1.id = 1;
...
// Initialize array
patientsArray[0] = p1;
patientsArray[1] = p2;
patientsArray[2] = p3;
patientsArray[3] = p4;
当所有内容均为struct
时,您必须先填写各个结构,然后再将其复制到数组中。
您肯定不能要做的是使用当前使用的大括号符号将值大规模分配给整个数组。该语法适用于初始化程序,而初始化程序必须是变量声明的一部分。大括号在普通的赋值语句中是没有意义的,而这正是编译器所抱怨的。