sizeof与strlen的基本区别
来源:互联网 发布:js 骰子的转动效果 编辑:程序博客网 时间:2024/05/01 08:04
sizeof与strlen的基本区别
1.sizeof是运算符,strlen是函数。
2.sizeof可以用类型作参数,
strlen只能用char* 作参数。
3.数组做sizeof的参数不退化,传递给strlen就退化为指针。
4.sizeof操作符不能返回被动态分配的数组或外部数的数组大尺寸。
5.sizeof计算结构变量的大小时就必须讨论数据对齐问题。
6.sizeof操作符不能用于函数类型、不完全类型(eg:void)或位字段。
7.sizeof在编译是运算,计算的是存储空间的大小。
strlen在运行时运算,用来测量字符串长度,不括“\0”。
(ps:sizeof与strlen的返回值均为size_t)
Eg:以下例子均为32位的系统
char str[20]=”0123456789”;
int a=sizeof(str); //编译时运算--->结果:a=20
int b=strlen(str); //运行时运算--->结果:b=10
sizeof运算的几种案例
1.计算字符串
char *str1=“abcdef”;
char str2[]=“abcdef”;
int a=sizeof(str1); // str1是指针,算的是str1指针的存储空间 --->结果:a=4
Int b=sizeof(str2); // str2是地址,算的是str2数组的存储空间 --->结果:b=7
Ps:func(int str3[10]); //这种情况下str3作为指针 存储空间为4字节
2.计算表达式
char x='a',y='b';
sizeof(x); //结果:1字节
sizeof(x+y); // x+y表达式整型提升 --->结果:4字节
sizeof(x= x+y); // x= x+y表达式整型提升,再截断赋值。--->结果:1字节
Ps:sizeof并不对表达式求值,x仍然为'a'。
3.计算指针数组
char*argv2[]={"a","de","gh","kydfsd"};
printf("argv2= %d\n",sizeof(argv2); //此处计算的是所有指向字符串的指针的存储空间 -->结果:16
4.对函数使用sizeof
在编译阶段会被函数返回值的类型取代。
int f1(){return 0;}
printf("%d\n",sizeof(f1); //f1返回值为int -->结果:4
5.计算类
class A1{
public:
int a;
static int b;
A1();
~A1();
}
sizeof(A1) ;
//因为静态变量是存在全局数据区的,而sizeof计算栈中分配的大小,是不会计算在内的 --->结果:4
5.计算空类
空类所占空间为1,单一继承的空类空间也为1,多重继承的空类空间还是1。
但是虚继承涉及虚表,所占空间为4.
- sizeof与strlen的基本区别
- 基本语言细节--C++之sizeof与strlen的区别
- sizeof与strlen的区别
- sizeof()与strlen()的区别
- sizeof 与 strlen 的区别
- sizeof与strlen的区别
- strlen与sizeof的区别
- sizeof()与strlen()的区别
- strlen与sizeof的区别
- Sizeof与Strlen的区别
- strlen与sizeof的区别
- sizeof与strlen的区别
- sizeof与strlen的区别?
- sizeof与strlen的区别
- strlen与sizeof的区别
- sizeof与strlen的区别
- sizeof与strlen的区别
- strlen与sizeof的区别
- 安装boost的regex模块
- PING用一生诠释了TCP/IP
- DES加密代码
- 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体
- C# 类型详解
- sizeof与strlen的基本区别
- Oracle10g在CENTOS上的安装和升级(1)——准备篇
- zzy 的宠物 典型的矩阵乘法 二分+递归
- 关于chmod g+s的问题???
- 深入浅出之正则表达式
- Oracle数据库的物理结构
- [ios开发基础之 Core Data [1] ]Core Data数据持久性存储基础教程
- Boost::Regex详解(转)
- android中TextView设置连接及关闭软键盘