如何正确地为数组(结构类型)元素赋值?
How can I properly assign a value to an array (of structure type) element?
#include <stdio.h>
struct virus
{
char signature[25];
int size;
}v[2];
int main(void) {
static v[0] = {"Yankee",1813};
static v[1] = {"Doodle",2813};
int i;
for(i=0;i<=1;i++)
{
printf("%s %d\n",v[i].signature,v[i].size);
}
return 0;
}
我在此 C 代码中遇到编译器错误。
Error: Declaration syntax in function main()
我猜测 v[2]
中存在一些错误,因为它与 extern class 相关联,而 v[0]
和 v[1]
与静态 class.
但是,我不确定这是唯一的原因还是其他原因?
编辑:我通过删除错误的语法来编辑代码。
v[2]
的声明没有错误,问题在后面
你写了
static struct v[0] = {"Yankee",1813};
其中试图定义大小为 0 的数组,默认情况下 C 标准不允许这样做。
也就是说,语法也错得离谱。那里没有合适的 type,请记住,struct
本身不是类型,而是关键字。 struct <something>
实际上是一个类型.
那么,从逻辑的角度来看,您可能根本不需要一个新变量。如果您想使用 v
中的数组元素,只需使用变量名即可。像
#include <stdio.h>
struct virus
{
char signature[25];
int size;
}v[2] = { {"Yankee",1813}, {"Doodle",2813}}; //get it initialized, job done
int main(void) {
int i;
for(i=0;i<=1;i++)
{
printf("%s %d\n",v[i].signature,v[i].size);
}
return 0;
}
我会以更好的方式完成工作,恕我直言。
编辑:
如果您对分配单个元素感兴趣(而不是初始化),那么,您不能为此目的使用大括号括起来的初始化程序,这并不意味着赋值的 RHS 操作数。为此,您需要使用 compound literal,例如
v[0] = (struct virus){"Yankee",1813};
v[1] = (struct virus){"Doodle",2813};
也会完成这项工作。
不要混淆结构定义和变量声明,那是草率的做法。
改为使用 typedef:
typedef struct
{
char signature[25];
int size;
} virus_t;
那么你可以随意声明这个类型的变量:
static virus_t v[2] =
{
{"Yankee",1813},
{"Doodle",2813}
};
或者使用 指定的初始值设定项:
static virus_t v[2] =
{
[0] = {"Yankee",1813},
[1] = {"Doodle",2813}
};
#include <stdio.h>
struct virus
{
char signature[25];
int size;
}v[2];
int main(void) {
static v[0] = {"Yankee",1813};
static v[1] = {"Doodle",2813};
int i;
for(i=0;i<=1;i++)
{
printf("%s %d\n",v[i].signature,v[i].size);
}
return 0;
}
我在此 C 代码中遇到编译器错误。
Error: Declaration syntax in function
main()
我猜测 v[2]
中存在一些错误,因为它与 extern class 相关联,而 v[0]
和 v[1]
与静态 class.
但是,我不确定这是唯一的原因还是其他原因?
编辑:我通过删除错误的语法来编辑代码。
v[2]
的声明没有错误,问题在后面
你写了
static struct v[0] = {"Yankee",1813};
其中试图定义大小为 0 的数组,默认情况下 C 标准不允许这样做。
也就是说,语法也错得离谱。那里没有合适的 type,请记住,struct
本身不是类型,而是关键字。 struct <something>
实际上是一个类型.
那么,从逻辑的角度来看,您可能根本不需要一个新变量。如果您想使用 v
中的数组元素,只需使用变量名即可。像
#include <stdio.h>
struct virus
{
char signature[25];
int size;
}v[2] = { {"Yankee",1813}, {"Doodle",2813}}; //get it initialized, job done
int main(void) {
int i;
for(i=0;i<=1;i++)
{
printf("%s %d\n",v[i].signature,v[i].size);
}
return 0;
}
我会以更好的方式完成工作,恕我直言。
编辑:
如果您对分配单个元素感兴趣(而不是初始化),那么,您不能为此目的使用大括号括起来的初始化程序,这并不意味着赋值的 RHS 操作数。为此,您需要使用 compound literal,例如
v[0] = (struct virus){"Yankee",1813};
v[1] = (struct virus){"Doodle",2813};
也会完成这项工作。
不要混淆结构定义和变量声明,那是草率的做法。
改为使用 typedef:
typedef struct
{
char signature[25];
int size;
} virus_t;
那么你可以随意声明这个类型的变量:
static virus_t v[2] =
{
{"Yankee",1813},
{"Doodle",2813}
};
或者使用 指定的初始值设定项:
static virus_t v[2] =
{
[0] = {"Yankee",1813},
[1] = {"Doodle",2813}
};