在日常编程中,sizeof和strlen以高频率出现在许多位置,尤其是在对字符串的大小进行计算时,今天我们来系统的了解一下他们。
首先是区别:
- sizeof是运算符,strlen是函数
- sizeof可以用类型或者函数做参数,strlen只能用char*做参数,且必须是以‘\0’结尾
- 对数组进行处理时,sizeof以数组为参数不会退化,而传递给strlen会退化为指针
- 大部分sizeof在编译阶段就进行处理,统计占用的内存大小,而strlen是在运行时才计算字符串的大小。
- sizeof操作符不能用于函数类型、不完全类型或位字段(不能处理未知大小的数据类型)
sizeof 的使用场合
- 查看某种类型的对象在内存中所占的内存大小(单元字节)
- 动态分配内存时,告诉系统分配多大的内存。
- 对于字节数可能发生变化的操作数,使用sizeof代替常量计算。
接下来通过一段代码来了解一下sizeof和strlen
int main()
{
char str[10]="abcde"; //10个char型的数组
char str1[]="abcde";//char型的字符串
char* p = str; //char型的指针,指向str
int size = sizeof(str); //str所占的内存空间大小10
cout<<size<<endl;
int size1 = sizeof(str1); //str1所占的内存空间大小5,'\0'结尾算一个字符
cout<<size1<<endl;
int len = strlen(str);//str1的字符串有效长度为5
cout<<len<<endl;
int size2 = sizeof(p);//p为指针,指针的大小在32位操作系统下为4字节
cout<<size2<<endl;
int len1 = strlen(p);//len1为指针所指向的字符串的有效长度
cout<<len1<<endl;
return 0;
}
执行结果: