void Func(char str_arg[100]){ printf("%d\n", sizeof(str_arg)); } int main(void){ char str[] = "Hello"; printf("%d\n", sizeof(str)); printf("%d\n", strlen(str)); char*p = str; printf("%d\n", sizeof(p)); Func(str); }32位系统下下面程序的输出结果为多少?
void Func(char str_arg[100]) { printf("%d\n",sizeof(str_arg)); } int main(void) { char str[]="Hello"; printf("%d\n",sizeof(str));//字符串没有作为函数参数,所以直接使用sizeof求字符串大小时,把'\0'也算进去了,结果是5+1=6 printf("%d\n",strlen(str));//使用strlen计算时,结尾的'\0'是不计算的,所以 = 5 char*p=str; printf("%d\n",sizeof(p));//p是一个指针类型,指针类型算一个int大小 Func(str);//字符串作为函数参数,退化为指针,所以再用sizeof计算时,也是一个int的大小 }
对字符串进行sizeof操作的时候,会把字符串的结束符"\0"计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。