sizeof
1.是一个运算符
2.是分配的数组实际所占的内存空间大小,不受里面存储内容的改变
3.sizeof可以用类型做参数,还可以用函数作为参数
int fun();
printf("%d\n",sizeof(fun()));
则输出的结果是sizeof(int)=4;
strlen
1.是一个函数
2.计算字符串的长度,以’\0’为字符串结束标志
3.strlen只能用char*做参数
简单用代码来看两者的区别:
char str[20]="0123456789";
int a=sizeof(str);// a=20;
int b=strlen(str);//b=10;
char* ptr="0123456789";
int a=sizeof(ptr);//a=4;此时的ptr是字符指针,所以在32位操作系统上是4个字节
int b=sizeof(*ptr);//b=1;此时*ptr指的是第一个元素,因为类型是char所以1个字节
int c=strlen(str);//c=10;
注意:::
运算符和函数的区别
- 语法形式上有区别
- 运算符只能重载,不能自定义,函数的名字随便起,只要是个标识符就行;但运算符不行,比如,你无法仿照其他语言的符号,自定义一个乘法运算符“”**“”
- 任何函数都可以重载或者覆盖,但通常你不能改变运算符作用于内置类型的行为,比如你不能通过重载"operator+",让3+2产生6.
其实总结来看,运算符本质上也是函数。只是运算符是编译器需要进行进一步解释。而函数是直接调用。