如何在C中使用相同的值(而不是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

我尝试将所有结构成员分配给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,因为
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.