sizeof与strlen的用法解读
来源:互联网 发布:第三方数据公司 编辑:程序博客网 时间:2024/04/30 03:04
sizeof(数组名),这里数组名表示“整个数组”。
sizeof(数组名+0),这里数组名(只要不是单独出现)表示数组首元素的“地址”
sizeof(*数组名),这里数组名表示数组“首元素的地址”
sizeof求字符串时要算上\0。
sizeof(数组名+0),这里数组名(只要不是单独出现)表示数组首元素的“地址”
sizeof(*数组名),这里数组名表示数组“首元素的地址”
sizeof求字符串时要算上\0。
strlen(abc def):字符串为"abc def"其后系统自动补上'\0';而求字符串长度的函数strlen()只要遇见'\0';就返回函数值!而且'\0'不算在其中!故返回值为7(空格也算一个字符!)
strlen(abc\0def):strlen函数遇到'\0'即结束,故返回值为:3
strlen()求的是地址(就是能包含该类型多少)的长度
strlen(abc\0def):strlen函数遇到'\0'即结束,故返回值为:3
strlen()求的是地址(就是能包含该类型多少)的长度
(*数组名)求得都是首地址
char p[4] = "abcd"; //给定字符串下标,其后无\0printf("%d\n",sizeof(p));// 4printf("%d\n",strlen(p)); //11
char p[] = "abcd";//未给定字符串下标,其后系统自动补上\0printf("%d\n",sizeof(p)); //5printf("%d\n",strlen(p)); //4
//一维数组int a[] = {1,2,3,4};printf("%d\n",sizeof(a)); //16 整个数组的大小printf("%d\n",sizeof(a+0)); //4 数组的首元素1的地址大小printf("%d\n",sizeof(*a)); //4 数组首元素1的大小printf("%d\n",sizeof(a+1)); //4 数组的第二个元素2的地址大小printf("%d\n",sizeof(a[1])); //4 数组第二个元素的大小 printf("%d\n",sizeof(&a)); //4 整个一维数组地址的地址大小printf("%d\n",sizeof(&a+1)); //4 整个一维数组地址(数组外)的下一地址大小printf("%d\n",sizeof(&a[0])); //4 数组第一个元素1的地址大小printf("%d\n",sizeof(&a[0]+1)); //4 数组第二个元素2的地址大小
//字符数组 char arr[] = {'a','b','c','d','e','f'};printf("%d\n", sizeof(arr)); //6 整个数组的大小printf("%d\n", sizeof(arr+0)); //4 数组的首元素'a'的地址大小 printf("%d\n", sizeof(*arr)); //1 数组首元素'a'的大小printf("%d\n", sizeof(arr[1])); //1 数组第二个'b'的大小printf("%d\n", sizeof(&arr)); //4 整个字符数组地址的地址大小printf("%d\n", sizeof(&arr+1)); //4 整个字符数组地址(数组外)的下一地址大小printf("%d\n", sizeof(&arr[0]+1)); //4 数组第二个元素'b'的地址大小
printf("%d\n", strlen(arr)); //19 数组后出现\0为止的长度(随机值)printf("%d\n", strlen(arr+0)); //19 数组后出现\0为止的长度(随机值)//printf("%d\n", strlen(*arr)); //err 错误,*arr为首元素'a',strlen是按(该类型变量的长度)"地址"求取长度//printf("%d\n", strlen(arr[1])); //err 错误,arr[1]为元素'b',strlen是按(该类型变量的长度)"地址"求取长度printf("%d\n", strlen(&arr)); //19 有警告,整个数组地址到出现\0为止的长度(随机值)printf("%d\n", strlen(&arr+1)); //13 有警告,从整个数组地址(数组外)的下一个地址开始出现\0为止的长度(随机值)printf("%d\n", strlen(&arr[0]+1)); //18 取数组第二个元素到出现\0为止的长度(随机值)
char *p = "abcdef"; printf("%d\n", sizeof(p)); //4 指针变量p的大小printf("%d\n", sizeof(p+1)); //4 指针变量p的下一地址的大小printf("%d\n", sizeof(*p)); //1 字符串首字符a的大小 printf("%d\n", sizeof(p[0])); //1 字符串首字符a的大小printf("%d\n", sizeof(&p)); //4 存放指针变量p的地址的大小printf("%d\n", sizeof(&p+1)); //4 存放指针变量p的下一个地址的大小printf("%d\n", sizeof(&p[0]+1)); //4 字符串中字符b的地址大小
printf("%d\n", strlen(p)); //6 整个字符串的长度(按字符类的地址的长度)printf("%d\n", strlen(p+1)); //5 从第二个字符开始的字符串的长度(按字符类的地址的长度)printf("%d\n", strlen(*p)); //err 错误,*p为字符'a',strlen是求地址长度,程序崩溃printf("%d\n", strlen(p[0])); //err 错误,p[0]为字符'a',strlen是求地址长度,程序崩溃printf("%d\n", strlen(&p)); //3 有警告,二级指针,生成随机数printf("%d\n", strlen(&p+1)); //11 有警告,二级指针,生成随机数printf("%d\n", strlen(&p[0])); //6 从字符串首地址到字符串结束(\0),字符串长度printf("%d\n", strlen(&p[0]+1)); //5 从字符串第二个字符地址到字符串结束(\0),字符串长度
//二维数组 int a[3][4] = {0}; printf("%d\n",sizeof(a)); //48 整个二维数组的大小printf("%d\n",sizeof(a[0][0])); // 4 元素a[0][0]的大小printf("%d\n",sizeof(a[0])); //16 第一行(a[0][0],a[0][1],a[0][2])的元素的大小printf("%d\n",sizeof(a[0]+1)); //4 第一行的下一个元素a[1][0]的大小printf("%d\n",sizeof(a+1)); //4 首地址的下一个元素a[0][1]的地址大小printf("%d\n",sizeof(&a[0]+1)); //4 第一行a[0]下一地址的大小(a[0][1]的地址大小)printf("%d\n",sizeof(*a)); //16 第一行元素的地址大小(n维数组可以看做是n-1个元素的一维数组,所以*a是以a[0]为数组名的一维数组)printf("%d\n",sizeof(a[3])); //16 数组外的类a型的地址大小
1 0
- sizeof与strlen的用法解读
- sizeof与strlen的用法
- sizeof与strlen的用法
- sizeof()与strlen()用法
- sizeof与strlen的用法与区别
- 关于sizeof与strlen用法的讨论
- 实例分析sizeof与strlen的用法
- strlen与sizeof的区别和用法
- strlen 和sizeof的用法
- sizeof和strlen的用法
- sizeof 和strlen的用法
- sizeof的用法及与strlen的比较
- sizeof的用法及与strlen的比较
- sizeof 与 strlen 的一些用法及区别
- sizeof详解 sizeof与strlen的比较
- sizeof与strlen的区别
- sizeof()与strlen()的区别
- sizeof 与 strlen 的区别
- java 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
- x86汇编学习错误总结
- uva 190 Circle Through Three Points
- 随机森林与GBDT
- Nginx学习笔记
- sizeof与strlen的用法解读
- xilinx ISE 调用microblaze 启动SDK遇到了问题
- linux命令随笔(5)
- sql行转列面试题
- Powerbuilder 11.5破解方法
- 性能测试
- 零度工作日记
- poj 3469 Dual Core CPU
- Java学习之方法重载