sizeof和strlen
2016-04-28 00:12
411 查看
sizeof:判断数据类型长度符的关键字,用于求取一个对象或者类型所占的内存字节数
strlen:求取字符串长度的函数,不包括‘\0’
例题说明:
1,整型数组
如果仔细观察就会发现,一直推崇的数组名代表数组首元素的地址在以上求值中好像并不适用,是的,我们不得不注意一个知识点,那就是数组名
在两种情况下并不代表数组首元素的地址,1:sizeof(a) -----求整个数组所占的字节数
2:&a------整个数组的地址
由以上截图可知,虽然前两行的取值相同,但意义完全不一样,加1后一个跳到了第二个元素,一个却跳过了整个数组
2,字符数组
3,字符指针
strlen:求取字符串长度的函数,不包括‘\0’
例题说明:
1,整型数组
int a[]={1,2,3,4}; printf("%d\n",sizeof(a));-----16//a表示整个数组的地址,在32位系统下,所有地址均占4个字节,所以结果为16 printf("%d\n",sizeof(a+0));----4//a+0表示第一个元素的地址,在32位系统下,所有地址均占4个字节 printf("%d\n",sizeof(*a));----4//对数组的第一个元素进行a[0]进行解引用,一个整型元素在内存中占4个字节 printf("%d\n",sizeof(a+1));----4/第二个元素a[1]的地址 printf("%d\n",sizeof(a[1]));----4//第二个元素a[2]的值 printf("%d\n",sizeof(&a));----4//整个数组的地址,(它同样指向a[0]的地址,但与a+0的意义却大不相同) printf("%d\n",sizeof(&a+1));----4//跳过整个数组的下一个地址,因为是地址,所以结果仍为4 printf("%d\n",sizeof(&a[0]));----4//第一个元素a[0]的地址 printf("%d\n",sizeof(&a[0]+1));----4//第二个元素a[1]的地址 printf("%d\n",sizeof(*&a));----16//对整个数的地址进解引用,相当于a
如果仔细观察就会发现,一直推崇的数组名代表数组首元素的地址在以上求值中好像并不适用,是的,我们不得不注意一个知识点,那就是数组名
在两种情况下并不代表数组首元素的地址,1:sizeof(a) -----求整个数组所占的字节数
2:&a------整个数组的地址
由以上截图可知,虽然前两行的取值相同,但意义完全不一样,加1后一个跳到了第二个元素,一个却跳过了整个数组
2,字符数组
char name[]="abcdef"; printf("%d\n",sizeof(name[0]));//1----数组第一个元素即字符a所占字节数 printf("%d\n",sizeof(&name));//4----整个数组的地址 printf("%d\n",sizeof(*name));//1----数组 printf("%d\n",sizeof(&name+1));//4----第一个元素所占的字节数 printf("%d\n",sizeof(name+1));//4----数组的下一块地址 printf("%d\n",sizeof(name));//7----整个数组字符串所占的字节数,包括‘\0’ printf("%d\n",strlen(name));//6----求字符数组的长度,不包括‘\0’ printf("%d\n",strlen(&name));//6----从第一个元素开始求取字符串长度,直到遇见‘\0’ printf("%d\n",strlen(&name+1));//随机值----从数组下一块空间的地址开始求字符串长度,由于‘\0’的位置不确定,所以结果为随机值 printf("%d\n",strlen(name+1));//5----从数组第二个元素即b开始,求字符串长度,直到遇见‘\0’
3,字符指针
<pre name="code" class="cpp">char *name="abcdef"; printf("%d\n",sizeof(name[0]));//1----求字符a所占字节 printf("%d\n",sizeof(&name));//4----字符指针name本身的地址所占字节 printf("%d\n",sizeof(*name));//1----通过地址解引用求字符a所占字节 printf("%d\n",sizeof(&name+1));//4----整个字符指针的下一块空间的地址 printf("%d\n",sizeof(name+1));//4----字符b的地址 printf("%d\n",sizeof(name));//4----字符a的地址 printf("%d\n",strlen(name));//6----从字符a开始求字符串长度,遇见‘\0’停止 printf("%d\n",strlen(&name));//随机值----代表指针name本身的地址,由于‘\0’的位置不确定,所以是随机值 printf("%d\n",strlen(&name+1));//7----表示指针name本身地址的下一块地址,‘\0’不确定,随机值 printf("%d\n",strlen(name+1));//5----从字符b开始求取字符串长度,直到遇见‘\0’
相关文章推荐
- python正则表达式
- 异常处理
- Visual Studio 2013(VS2013)error C3861: “__uncaught_exception”: 找不到标识符
- 写论文第五天:参数扫描法
- 个人项目经历-----个人自学路程(1)
- 读书笔记 第三章 数据化运营中常见的数据分析项目类型
- iBatis与Hibernate区别?
- [NOIP2010] 普及组
- NOIP2010普及组题解
- 警告: No configuration found for the specified action: 'upload' in namespace: ''. Form action . . .
- POJ 3320 Jessica's Reading Problem(尺取法)
- Mysql(一)安装使用
- java操作ftp实现文件的上传下载(适用于图片文档服务器)
- Java ArrayList工作原理及实现
- 快速排序 一般分割
- Android 深入理解Android中的自定义属性
- 团队开发
- 写个js程序咖常写的游戏-贪吃蛇
- UEFI模式下安装Windows 10、Ubuntu 16.04 LTS双系统教程
- JSP学生信息管理系统