关于 一个SIZEOF的有关问题

关于 一个SIZEOF的问题
如果定义函数 
void func(char str[200])
{
  printf("%d\n",sizeof(str));
}
请问输出为什么是4,而不是200


------解决方案--------------------
数组作为函数参数等价于指向数组首元素的常量指针,你写200还是2000都一样没意义
指针大小为4
------解决方案--------------------
数组作为函数参数时,退化为指针
------解决方案--------------------
void test(char str[200])
{
printf("%d\n",sizeof(str)); ====> 4
}


int main(int argc, char *argv[])

{
char str[200] = {0};

printf("%d\n",sizeof(str)); =====> 200
test(str);

}

数组作为函数参数时,退化为指针
------解决方案--------------------
数组作为函数参数时,退化为指针

up + 1
------解决方案--------------------
C/C++ code
void func(char str[200]);//很有欺骗性的申明

------解决方案--------------------
数组做形参 会退化成常量指针。

func(char str[20]) == func(const char *str)
------解决方案--------------------
形参其实是一个地址,即指针类型。所以,在编译器为32位的环境里,sizeof的指针类型值都是4.
------解决方案--------------------
str是指针啊,肯定是4啊,这个问题面试的时候问到过好几次。,
------解决方案--------------------
数组名和指针有很多相似之处,当用数组做为函数参数时,数组名会弱化成变量指针,详细可以参考《C语言参考手册》第五版,里面对数组名的弱化介绍的很详细.