我在某处阅读"你无法在运行时初始化这样的结构。" 例如:
#define NOOFITEM 12
struct item_info
{
char itemname[15];
int quantity;
float retail;
float wholesale;
}item[NOOFITEM];
int main()
{
item[0]={"rice",10,40,30};
item[1]={"sugar",10,40,30};
item[2]={"soap",10,40,30};
}
但是如果你想在运行时分配值,那么你必须手动完成,如:
int main()
{
strcpy(item[0].itemname, "rice");
item[0].quantity = 10;
item[0].retail = 40;
item[0].wholesale = 30;
}
我在互联网上试过,但我不知道差异。我想知道这两者在运行时和编译时间方面的区别。 请解释我下面的一个。这是运行时间还是编译时间?我们如何确定哪个是运行时间,哪个是编译时间!
struct item_info
{
char itemname[15];
int quantity;
float retail;
float wholesale;
}item[NOOFITEM] =
{
{"rice",10,40,30},
{"sugar",10,40,30},
{"soap",10,40,30}
};
答案 0 :(得分:4)
这与编译时和运行时之间的差异无关,而是与初始化和赋值之间的差异有关。初始化始终是声明的一部分。
例如
int a = 5; // declaration with initialization
int b; b = 5; // declaration (without initialization) followed by an assignment
您尝试使用(在第一个示例中)分配给结构的语法只能用于初始化,即在声明本身中。在您的上一个代码段中,您在声明期间初始化,这很好。
作为解决这种语法限制的一种方法,您可以使用复合文字(在C99中添加),带括号的类型名称,后跟{
... }
所包含的初始值列表:
struct item_info
{
char itemname[15];
int quantity;
float retail;
float wholesale;
} item[NOOFITEM];
int main(void)
{
item[0] = (struct item_info){ "rice", 10, 40, 30 };
item[1] = (struct item_info){ "sugar", 10, 40, 30 };
item[2] = (struct item_info){ "soap", 10, 40, 30 };
}