sizeof和strlen的区别
来源:互联网 发布:国际学校知乎 编辑:程序博客网 时间:2024/06/15 20:38
一 sizeof
1.sizeof是一个运算符,它在头文件中被重命名为unsigned int .
2.它的作用是计算一种数据类型所占的字节数。
3.它的对象可以是数组,指针,对象,函数,结构体等。
4.它在编译阶段就完成了大小计算,所以不可以用来计算动态分配的空间的大小,而且sizeof的值与空间中的内容无关
5.sizeof计算各种数据类型时的含义:
数组名–表示数组类型的字节数(如 int arr[10] sizeof(a)/sizeof(a[0])表示计算int [10]这一数据类型的大小)
函数名–表示计算函数返回值的类型的字节数
指针–表示某一类型的地址的字节数(地址一般都占四个字节的大小)
对象–对象所有有效类型所占空间的和
例如
public: void Fun()//无论返回值为什么类型,都不算大小 { cout << endl; }private: int a;//大小为4 int b;//大小为4
这时对象的大小为8个字节
但是这里要注意一个特例,就是函数被声明为virtual的时候,无论返回值的类型是什么,它的大小都为4。大家可以自己上机试验一下。
二.strlen
strlen 是一个函数,它是在运行时才计算数值的。它用来计算有效字符的个数,遇到NULL的时候停止计算。而且它的参数只能是字符数组名或者字符指针。当传入的参数是数组名的时候,数组名退化为指针。
三。接下来给出一些实例
int a[] = {1,2,3,4};
printf(“%d\n”,sizeof(a));//16
printf(“%d\n”,sizeof(a+0));//4 首元素的地址向后移动0个位置
printf(“%d\n”,sizeof(*a));// 4 a代表首元素的地址,这里就是首元素的大小
printf(“%d\n”,sizeof(a+1));//4 首元素的地址向后移动一个元素的元素地址
printf(“%d\n”,sizeof(a[1]));// 4 a【1】纸的大小
printf(“%d\n”,sizeof(&a));//4 取数组的地址
printf(“%d\n”,sizeof(&a+1));//4 数组的地址加一个数组长度的地址,即下一个数组的地址
printf(“%d\n”,sizeof(&a[0]));//4 数组首元素的地址
printf(“%d\n”,sizeof(&a[0]+1));//4 数组第二个元素的地址
int a[3][4] = {0};
printf(“%d\n”,sizeof(a));//48 数组名 代表首元素的地址,在sizeof中数组名代表整个数组元素,这里就是整个数组元素
printf(“%d\n”,sizeof(a[0][0]));//4, a【0】【0】的值
printf(“%d\n”,sizeof(a[0]));//16 一维数组名 代表第0行的元素
printf(“%d\n”,sizeof(a[0]+1));//4 .a【0】【1】的地址
printf(“%d\n”,sizeof(a+1));//4. 第2行的地址
printf(“%d\n”,sizeof(&a[0]+1));//4 第2行的地址
printf(“%d\n”,sizeof(*a));//16. a代表数组首元素的地址,即第一行的地址,这里的值为第一行的元素大小
printf(“%d\n”,sizeof(a[3]));//16 这一行的元素
char *name=”abcde”;
strlen(&name+1); 从 存储指针name的空间的下一块空间开始找\0
strlen(&name); 从&name指向的地址(即name这个指针的内容)第一个字符开始找\0
strlen(name); 给的是一个指针的话,是从该指针指向的地址(即从a开始)开始找一直到\0为止
- strlen和sizeof的区别
- strlen和sizeof的区别
- strlen和sizeof的区别
- sizeof 和 strlen 的区别
- sizeof 和 strlen的区别
- sizeof和strlen的区别
- sizeof 和 strlen 的区别
- sizeof 和strlen的区别
- strlen和sizeof的区别
- sizeof和strlen的区别
- strlen和sizeof的区别
- sizeof和strlen的区别
- strlen和sizeof的区别
- strlen和sizeof的区别
- sizeof和strlen的区别
- strlen和sizeof的区别
- sizeof和strlen的区别
- sizeof和strlen的区别
- MySQL提示“too many connections”的解决办法
- 118. Pascal's Triangle&&119. Pascal's Triangle II
- postInvalidate,postInvalidateDelayed,invalidate
- SNMP4J
- 自定义Preference中设置其中TextView,等widget方法
- sizeof和strlen的区别
- Android学习系列(12)--App列表之拖拽GridView
- scrollview嵌套listview运行后最先显示出来的位置不在顶部而是中间问题
- Android Studio教程 基本设置与运行
- SVN安装及使用说明
- 遇到问题一定要先上 Stack Overflow 去找!!!
- 2016 -Nginx的负载均衡 - 一致性哈希 (Consistent Hash)
- app移动端H5页面开发调试之Chrome远程调试
- DB sharding and ID design