迭代地为C结构赋值

时间:2011-07-29 09:17:11

标签: c enums struct iteration

我的结构定义为

typedef struct{
char string1
char string2
int number1
char string3
}structure1

并希望在这样的循环中将值分配给string1,string2,number1,string3

structure1 bob
for(int i = 0,i<=4,i++)
{
bob.i = assigned value
}

现在我明白上面代码的通用形式只适用于整数,因为你不能只使用string = string进行赋值,但同样的问题就出现了,因为我不知道如何引用结构中的值没有专门命名它们。对于字符串,将依赖于i索引进行第二次分配,以确定它是否为当时的整数或字符串,以便它可以执行赋值。我正在思考枚举的内容,但我以前从未在实际意义上使用它们,只是理论上的。

4 个答案:

答案 0 :(得分:2)

在C中是不可能的。最接近的是计算字段偏移,然后使用它们来分配值:

int fieldOffset[4];

structure1 base;

fieldOffset[0] = (char*)&base.string1 - (char*)&base;
fieldOffset[1] = (char*)&base.string2 - (char*)&base;
fieldOffset[2] = (char*)&base.number1 - (char*)&base;
fieldOffset[3] = (char*)&base.string3 - (char*)&base;

structure1 structYouWantToAssign;

for (int i = 0; i < 4; ++i)
{
    *((char*)&structYouWantToAssign + fieldOffset[i]) = assignedValue;
}

警告:此代码只是为了证明可以指定不带名字的字段,但您应使用它!

答案 1 :(得分:0)

不幸的是,这在C中是不可能的。这真的很酷,但语法中没有任何类型。

答案 2 :(得分:0)

您可以尝试稍微不同的方法。想要这样做意味着你正在初始化它们,在这种情况下你可以这样做:

#define STRUCT_DEF {"default", "another", 1234, "the last string" }
...
structure1 Variable = {"default", "another", 1234, "the last string"};

(假设你的意思是char string1 [STR_LEN]而不只是一个char。)

或者你可以尝试用里面的数组重新定义你的结构:

typedef struct{
char string[NUM_STRINGS][STR_LENGTH];
int number1;
}structure1

通过这种方式,您可以在循环中处理字符串,而无需单独命名。

答案 3 :(得分:0)

使用分配给会员的功能: -

void BobAssign(struct* s, int i, void * value);