#include<stdio.h>
#include<string.h>
void output(char num1[ ])
{
printf("%d\n%d\n",sizeof(num1),strlen(num1));
}
int main()
{
char num[20];
printf("enter number:\n");
gets(num);
printf("%d\n%d\n",sizeof(num),strlen(num));
output(num);
return 0;
#include<string.h>
void output(char num1[ ])
{
printf("%d\n%d\n",sizeof(num1),strlen(num1));
}
int main()
{
char num[20];
printf("enter number:\n");
gets(num);
printf("%d\n%d\n",sizeof(num),strlen(num));
output(num);
return 0;
}
由于代码简单,所以直接全部给出,如果输入1234567;
可以看到,在主函数中的printf("%d\n%d\n",sizeof(num),strlen(num));输出是num数组的长度20和字符长度7;
但是在被调用的函数output中呢?看似好像还是一样,应该输出num数组的长度20和字符长度7,但是实际是4和7,这是为什么呢?
因为在数组名作为函数参数传递时,传递的实际上是指针,被调用函数接收到的实际参数的类型就是指针,不再具有数组的属性,因此output中的num1就是指针,不再是数组名,
sizeof(num1)就等于4,strlen(num1)仍然为7.