有关面向对象的问题 不太理解可以解释一下吗

问题遇到的现象和发生背景
  1. (单选题)下面给出两个struct A1和struct A2的结构,以及部分代码:
    struct A1 {

    int *items;

    int val0;

    int val1;

    int val2;

};

struct A2 {

int  items[0];

int  val0;

int  val1;

int  val2;

};

A1 a1;

a1.items=&(a1.val0);

a1.items[0] = 1;

a1.items[1] = 2;

a1.items[2] = 3;

A2 a2;

a2.items[0] = 11;

a2.items[1] = 12;

a2.items[2] = 13;

对于下面给出的四个逻辑表达式,

  1. sizeof(A1)>sizeof(A2)

  2. a1.val0 ==1

  3. a2.val0 == 11

  4. *(a2.items+1)==12

若不考虑编译时的警告信息和内存对齐方式,则正确说法的是:

A. 1,2,3为真,4为假
B.
1为真,2,3,4为假

C.
2,3,4为真,1为假

D. 1,2,3,4均为真

选择c.
sizeof(类名) 是把类中的数据类型占的内存加起来,A占用12,B.也占用12个。应该是相等的。所以第一个错误。其他均正确。