如何在C中使用相同的值(而不是0)设置结构
我尝试将所有结构成员分配给0,如下所示,但无效如何在C中使用相同的值(而不是0)设置结构,c,C,我尝试将所有结构成员分配给0,如下所示,但无效 struct sample { int a; int b; int c; int d; int e; int f; }; int main(void) { struct sample s1; memset(&s1, 1, sizeof(s1)); printf("%d",s1.e); return 0; } 上述代码没有将结构成员设置为1,因为mem
struct sample
{
int a;
int b;
int c;
int d;
int e;
int f;
};
int main(void)
{
struct sample s1;
memset(&s1, 1, sizeof(s1));
printf("%d",s1.e);
return 0;
}
上述代码没有将结构成员设置为1,因为memset
通过byte
工作byte
。因此,结构的每个字节
将具有值1
如果要初始化结构成员而不是0
。你可以做如下的事情
struct sample s1 = { 1,1,1,1,1,1};
或在声明后分别初始化每个成员
我尝试将所有结构成员分配给0
memset(&s1, 1, sizeof(s1));
这绝对不会使结构成员归零
这将:
memset(&s1, 0, sizeof(s1));
如果您想将它们设置为另一个值,您需要回答一个问题:您希望它的可移植性如何
便携式方式:
struct sample s1 = { 1,1,1,1,1,1}; // initialisation
s1.a = 1;
s1.b = 1;
s1.b = 1;
s1.d = 1;
s1.e = 1;
s1.f = 1;
非可移植方式(假设类型相同且成员之间没有填充):
#定义NMEMBERS 6
int*ptr=(void*)&s1;
for(int index=0;index
memset
可用于将对象初始化为所有位零,这适用于将所有int
成员值设置为0
对于非零初始值,有几种备选方案:
struct sample s1 = { 1, 1, 1, 1, 1, 1 }; // using an initializer
或
或
哪种方式不起作用?请解释您对使用的memset参数的理解,并与之进行比较,例如,顺便说一句,您可以像struct sample s1={0}一样进行初始化代码><这里不需要code>memset()
。另外:明白。谢谢你的回答
#define NMEMBERS 6
int *ptr = (void *)&s1;
for(int index = 0; index < NMEMBERS; index++, ptr++)
{
*ptr = 1;
}
struct sample s1 = { 1, 1, 1, 1, 1, 1 }; // using an initializer
struct sample s1;
s1.a = s1.b = s1.c = s1.d = s1.e = s1.f = 1; // initializing the members explicitly
static struct sample default_sample = { 1, 1, 1, 1, 1, 1 };
struct sample s1 = default_sample; // copying values from another structure.