设置不同的struct成员彼此相等

时间:2016-03-29 15:47:59

标签: c pointers struct typedef

假设我有两个不同类型的结构 EX:

Url::toRoute(['item/view', 'title' => BaseInflector::slug($model->title)]);

然后将它们初始化为

 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_B_pointer [7] .memberB1,当我设置等于struct_A_pointer [0] .member_A1时,它只接收值0.而不是struct_B_pointer中的实际值,而我不知道为什么如果成员属于同一类型会发生这种情况。另外,我还尝试创建一个虚拟变量并尝试以下

   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;
}

但是我得到了相同的结果,有点想我可以用这个来欺骗他们:p

非常感谢任何建议或意见

由于

1 个答案:

答案 0 :(得分:0)

 for(i=0; i<=10; i++)
  {
       struct_B_pointer[i].member_B1;
       struct_B_pointer[i].member_B2;
  }

不会初始化任何内容。实际上整个循环是一个NOOP,它最终很可能通过访问第11个元素来引发未定义的行为,第11个元素是数组之后的一个元素。

您只想循环10个元素并为成员分配内容

 for(i=0; i<10; i++)
  {
       struct_B_pointer[i].member_B1 = 42;
       struct_B_pointer[i].member_B2 = 43;
  }

此外,您根本不需要显式初始化数组(为零),因为编译器会为您执行此操作,因为它们是全局定义的。