假设我有两个不同类型的结构
例如:
typedef struct struct_A
{
int member_A1
char member_A2
}STRUCT_A;
typedef struct struct_B
{
int member_B1
char member_B2
}STRUCT_B;
然后将它们初始化如下
void struct_A_init(STRUCT_A *struct_A_pointer)
{
int i;
for(i=0; i<=10; i++)
{
struct_A_pointer[i].member_A1;
struct_A_pointer[i].member_A2;
}
}
void struct_B_init(STRUCT_B *struct_B_pointer)
{
int i;
for(i=0; i<=10; i++)
{
struct_B_pointer[i].member_B1;
struct_B_pointer[i].member_B2;
}
}
然后全局定义并按如下方式使用
STRUCT_A struct_A_pointer[10];
STRUCT_B struct_b_pointer[10];
some_function(types, types, types)
{
struct_A_pointer[0].member_A1 = struct_B_pointer[7].member_B1;
}
如果成员是同一类型,为什么不起作用?
目前,我已经进行了相同的设置,并将值加载到struct_B_pointer [7] .memberB1中,当我将其设置为等于struct_A_pointer [0] .member_A1时,它只收到一个值0。实际上不是struct_B_pointer中的内容,我不知道如果成员属于同一类型,为什么会发生这种情况。此外,我还尝试创建一个虚拟变量,并尝试了以下方法
dummy_Var = struct_B_pointer[7].member_B1;
struct_A_pointer[0].member_A1 = dummy_Var;
但我收到相同的结果,有点以为我可以用这个:p欺骗他们的系统
任何建议或意见,不胜感激
谢谢
最佳答案
这个
for(i=0; i<=10; i++)
{
struct_B_pointer[i].member_B1;
struct_B_pointer[i].member_B2;
}
不会初始化任何东西。实际上,整个循环是一个NOOP,最终它很可能通过访问数组的第11个元素来引发未定义的行为。
您只想循环10个元素并为成员分配一些内容
for(i=0; i<10; i++)
{
struct_B_pointer[i].member_B1 = 42;
struct_B_pointer[i].member_B2 = 43;
}
此外,您根本不需要显式初始化数组(将数组初始化为零),因为编译器会为您完成此操作,因为它们是全局定义的。
关于c - 设置不同的结构成员彼此相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36289056/