一些新手小疑点,总是不知道,望前辈们多多指点啊多谢

一些新手小问题,总是不知道,望前辈们多多指点啊,谢谢!
函数指针:
1.定义:typedef   void   (F1)(int   p1,   int   p2)
        typedef   void   (*F2)(int   p1,   int   p2)
        test   (int   p1,   int   p2);

        F1   *   fp1;
        F2       fp2;
        F1       fp3;
问:   语句
fp3   =   test;
fp2   =   test;
fp1   =   test
是否成立?
答案:第一条语句有错,其余两天语句正确。
麻烦大家能帮我一条一条解释一下。多谢。

2.struct   struct_A{
int   a;
char   b;
int   c;
short   d;
}
        struct   struct_B{
      int   a;
      char   b;
      short   c;
      int   d;
      }
struct_A   a;
struct   _B   b;
问:sizeof(struct_A   a)   =   ?
sizeof(struct_A   b)   =   ?
答案:sizeof(a)   为16,sizeof(struct_A   b)为12

为什么???
先谢谢了

------解决方案--------------------
1. test (int p1, int p2);返回类型是?
2.字节对齐的问题。struct_A占16个字节,int a 占4个,char b分配1个但是占4个,int c占4个,short d分配1个但是也占4ge。
struct_B占12个,int a占4个,char b和short c各分配1个,但是不足4个,所以共占4个,int d占4个,共总12个。
虽然sizeof的之前对b做了类型转换struct_A,但是只是对齐方式变了,类型所占内存并没有变化。
------解决方案--------------------
1 F1 fp3; 不是指针
2 如上楼所说 找内存对齐的帖子去看~~~
内存对齐以及cache line 关系到程序的移植性 以及运算效率 还是需要了解下的~