sizeof
- 功能:求对象所占用的字节大小
- 用法:sizeof(类型说明符,数组名或表达式)或sizeof 变量名;返回值unsigned int;
- 说明:sizeof是一个操作符而非函数
- 例1:
- int i;
- sizeof( i ); // ok
- sizeof i; // ok
- sizeof( int ); // ok
- sizeof int; // error
- sizeof (2); // ok, 2的类型为int,所以等价于 sizeof( int );
- sizeof( 2 +3.14); // ok, 3.14的类型为double,2也会被提升成double类型,所以等价于 sizeof( double );
- 例2:计算静态数组大小
- char str[20]="0123456789";
- int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。
- 例3:
- char* ss = "0123456789";
- sizeof(ss); //结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的值所占的空间,应该是长整型的,所以是4
- sizeof(*ss); //结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位
- 例4:
- char ss[] = "0123456789";
- sizeof(ss); // 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
- sizeof(*ss); // 结果 1 ===》*ss是第一个字符
strlen
- 原型:unsigned int strlen(char *s);
- 功能:统计从字符串s地址开始的,直到碰到第一个字符串结束符'\0'为止的字符个数
- 头文件:string.h
- 例1:
- char aa[10]; cout<<strlen(aa)<<endl; //结果是不定的
- char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0
- char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3
- 例2:
- int ss[100] = "0123456789";
- strlen(ss); // 错误 ===》strlen的参数只能是char* 且必须是以'\0'结尾的
sizeof和strlen比较:
- sizeof在编译时刻计算,strlen在运行时计算
- 数组做sizeof的参数不退化,传递给strlen就退化为指针了
- 注意:数组作为函数形参传递时转换为对应的指针变量。比如:void foo3(char arr[3]) 等价于void foo3(char *arr) ,所以在函数中,sizeof(arr) 等价于sizeof (char *),结果为4;
参考资料:
- strlen百度百科
- sizeof百度百科
- 扩展阅读:字节对齐