关于sizeof的一个初学者有关问题

关于sizeof的一个菜鸟问题
在VC++6.0中定义int a[100];sizeof(a)与sizeof(&a)的值都是400?
而假如像这样定义int b[100];
  void fun(int b[100]){
  sizeof(b); 其值大小就是4。  
  }
请教下这原因是什么?第一个中的sizeof(a)和sizeof(&a)为什么是400,a与&a不是地址么?其值大小应该是个整数的大小才对啊?

------解决方案--------------------
这个问题你要看下《关于C必须知道的XX个问题》,在C语言里,传递数组的时候其实数组已经退化为那类型的指针了。所以你只能得到一个指针的大小了
------解决方案--------------------
这样解释吧:
int a[100];
sizeof(a) = 400
sizeof(&a) = 400
是因为,你向编译器请求,在栈分配100个int型的数据,又因为在32位系统中,int型数据的字长为4个字节,故编译器会为你分配400个字节长度的一个int型数组。
a和&a的地址相同,所以,你用sizeof(a)和sizeof(&a)都会返回400
------解决方案--------------------
至于第二个问题,就涉及到函数传参了:
void fun(int b[100])
{
sizeof(b); //等于4
}

void fun(int* b)
{
sizeof(b); //等于4
}
是等价的,当你在调用fun函数时,他们内部实际上是这样做的,比如:
int b[100];
fun(b); 
实际上是将b[100]数组的首个元素的地址赋值给了函数参数列表中的那个b指针,虽然都是b,但是却是在不同额作用域,故你可以理解成fun参数列表中的b是一个指针,在32位系统中,指针永远是4个字节,谢谢!