#include <stdio.h>
int c3 = sizeof( a3 ); // c3 == 4
printf("%d\n",c3 );
{
int c4 = sizeof( a4 ); // c4 == 4
printf("%d",c4 );
}
int main(void)
{
printf("%d",sizeof(p) );//4
return 0;
void foo3(char a3[3])
{int c3 = sizeof( a3 ); // c3 == 4
printf("%d\n",c3 );
}
{
int c4 = sizeof( a4 ); // c4 == 4
printf("%d",c4 );
}
int main(void)
{
char s1[3]="";
char s2[]="123456";
char *p ="123456";
foo3( s1);//4
foo3( s1);//4
printf("%d",sizeof(p) );//4
return 0;
}
在参数列表里面是不能定义数组的. (即使外表是数组,实际还是指针, 编译器会自动帮你修正)
也就是:
void theFun(char a[])
编译器自作主张帮你改成:
void tehFun(char *a )
为何不允许传递数组,这个问题我也想不明白,不过既然c++这样设计了,只有适应了.
数组传递的时候,
需要传递一个数组长度 len 参数用来控制指针操作数组的时候不会越界 ~
这是编译器行为,
一般情况下sizeof会返回数组所占用的空间,这在编译期间解析得到,编程一个常量。
函数调用因为发生在运行期间,这时编译器无法在编译期间决定数组(实参给形参表示的数组不定)的大小,不能在编译时将其转换为常数,故只能将之退化为运行期间可以处理的指针。
记住一点,sizeof运算符只在编译期间可见,编译结束后就没有sizeof行为了,都变为常数了(例如对形参数组做sizeof等于对指针做sizeof,变为4)