sizeof和strlen
来源:互联网 发布:dota2国服四君子 知乎 编辑:程序博客网 时间:2024/04/27 15:33
sizeof(double)?
一个整型表达式
- sizeof主一个操作符,不是函数调用,它将返回一个无符号的整形数据。因此可以将其看成一个无符号整形的表达式。
1、例程分析1
char a[10]="abcd"; sizeof(a)为10为什么?字符不是才一个字节吗?不是应该为5吗?
strlen 是返回字符串的长度。而sizeof,却是用来取得变量或类型所占用的内存大小的。这个a数组的字符串长度为4(末尾的\0是不计入字符串长度的),但a是10个单位的char型,它占用的内存空间是10*sizeof(char),为10. sizeof 返回的数量的单位是Byte.
2、例程分析2
已知 char *str1="absde";
char str2[]="absde";
char str3[8]={'a',};
char ss[] = "0123456789";
为什莫 sizeof(str1)=4
sizeof(str2)=6;
sizeof(str3)=8;
sizeof(ss)=11
32位机器上, 任何指针变量都只占4个字节。 64位机器则是8个字节。
首先说明一点,char类型占一个字节,所以sizeof(char)是1,这点要理解str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(str1)=sizeof(char*)=4,在C/C++中一个指针占4个字节str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,所以sizeof(str2)取得的是字符串"absde"占的总空间。"absde"中,共有a b s d e \0六个字符,所以str2数组的长度是6,所以sizeof(str2)=6*sizeof(char)=6str3已经定义成了长度是8的数组,所以sizeof(str3)为8str4和str2类似,'0' '1' ... '9'加上'\0'共11个字符,所以ss占的空间是11总之,对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char*与char[]容易混淆,一定要分清,而且char*="aaa"的写法现在不被提倡,应予以避免而strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。
3、例程分析3
char
c1[]={
'a'
,
'b'
,
'\0'
,
'd'
,
'e'
};
strlen(c1)的值是多少?
Strlen是计算字符串长度,遇到’\0’结束。c1的\0前面有两个字符,所以strlen(c1)的值为2.
4、C++对空类或者空结构体,对其sizeof操作时候,默认都是1个字节
5、例程分析4(类的大小)
- 类B虚拟继承类A。A中的内存方式是:4(int)+4(char对齐)+4(A中的虚指针)=12B中的方式是:4(A::int)+4(A::char对齐)+4(B中的虚指针)=12其中A的虚指针和B的虚指针不一样,并且各种的虚函数表也不一样。如果将class B:public A 改成 class B:virtual public A则B中会多一个指向虚继承的指针:12+4(Ptr_B->A)=16。如果再 class B中,多定义一个A中没有的虚函数,则又多4字节。不清楚具体是什么内容,猜测是B中又多了一个虚函数表。
6、例程5
- 含有虚函数的类都会建立一张虚函数表,表中存放的是虚函数的函数指针,这个表的地址存放在类中,所以不管有几个虚函数,sizeof(P)的大小都是4+4=8
7、实例6
结果是8 4 4 10 2 1
- 数组名不等价于指针,只有数组名作为函数参数时,才退化为指针
- 数组名不等价于指针,只有数组名作为函数参数时,才退化为指针
char str[]=”xunlei”;char* p=str;sizeof(*p)=1.
*p是char 类型的,指针p指向第一个元素,故sizeof(*p)应该返回相应值的字节数,
0 0
- sizeof和strlen()
- 关于sizeof 和strlen
- sizeof 和 strlen区别
- strlen 和sizeof
- sizeof 和strlen
- strlen和sizeof
- strlen和sizeof
- sizeof 和strlen
- sizeof和strlen
- sizeof和strlen
- sizeof 和 strlen
- sizeof和strlen
- strlen和sizeof
- sizeof 和 strlen()
- sizeof和strlen
- sizeof和strlen
- sizeof和strlen区别
- 浅析sizeof和strlen
- 欢迎使用CSDN-markdown编辑器
- Android 通过Uri获取文件路径
- Couldn’t perform atomic initialization
- Android 6.0 设备Idle状态介绍
- 国内互联网公司的开源项目及github地址汇总
- sizeof和strlen
- 抽象类
- IDA反汇编学习-转
- catkin 与 rosbuild解析及两者区别和联系
- 汇编-把二进制数据转换为相应字符串的程序
- Linux 环境配置
- 观察者模式
- 每天一个linux命令-ln
- 查找算法之hash查找-1