我的结构定义为
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索引进行第二次分配,以确定它是否为当时的整数或字符串,以便它可以执行赋值。我正在思考枚举的内容,但我以前从未在实际意义上使用它们,只是理论上的。
答案 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);