c语言中的数组sizeof和strlen
2017-04-05 12:38
218 查看
sizeof strlen
sizeof(): 返回一个对象或者类型所占的内存字节数。strlen(): 用来计算字符串的长度,遇到"\0"结束。
我们分别从一维数组,字符数组,二维数组的例子来分析。
注:数组名代表整个数组的时候只有两种情况
sizeof(数组名):数组名单独在sizeof中时表示整个数组。
&数组名:这里的数组名表示整个数组。
1.一维数组。
#include <stdio.h> int main() { int a[]={0,1,2,3}; printf("%d\n",sizeof(a));// 16 整个数组的大小 printf("%d\n",sizeof(a+0));// 4 首元素地址 printf("%d\n",sizeof(*a)); // 4 首元素 printf("%d\n",sizeof(a+1));// 4 第二个元素的地址 printf("%d\n",sizeof(a[1]));//4 第二个元素 printf("%d\n",sizeof(&a)); // 4 数组的地址 printf("%d\n",sizeof(*&a));// 16 数组的地址解引用,表示整个数组 printf("%d\n",sizeof(&a+1));// 4 跳过整个数组,指向数组后面的一个地址 printf("%d\n",sizeof(&a[0]));//4 首元素地址 printf("%d\n",sizeof(&a[0]+1));//4 第二个元素的地址 return 0; }
2.字符数组。
#include <stdio.h> int main() { char* p="abcdef"; printf("%d\n",sizeof(p));//4 元素a的地址 printf("%d\n",sizeof(p+1));//4 元素b的地址 printf("%d\n",sizeof(*p));//1 解引用为指向一个字符的大小 printf("%d\n",sizeof(p[0]));//1 首元素 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 从a开始字符串的长度 printf("%d\n",strlen(p+1));//5 从b开始字符串的长度 //printf("%d\n",strlen(*p));// error //printf("%d\n",strlen(p[0]));//error printf("%d\n",strlen(&p)); //随机值 printf("%d\n",strlen(&p+1)); //随机值 printf("%d\n",strlen(&p[0]+1)); //5 从b开始找 return 0; }
#include <stdio.h> int main() { char arr[]={'a','b','c','d','e','f'}; printf("%d\n",sizeof(arr));//6 整个数组大小 printf("%d\n",sizeof(arr+0));//4 首元素的地址 printf("%d\n",sizeof(*arr));//1 首元素大小 printf("%d\n",sizeof(arr[1]));//1 第二个元素 printf("%d\n",sizeof(&arr));//4 数组的地址 printf("%d\n",sizeof(&arr+1));//4 整个数组之后的地址 printf("%d\n",sizeof(&arr[0]+1));//4 第二个元素的地址 printf("%d\n",strlen(arr));//随机值 printf("%d\n",strlen(arr+0));//随机值 //printf("%d\n",strlen(*arr));// error //printf("%d\n",strlen(arr[1]));//error printf("%d\n",strlen(&arr)); //随机值 printf("%d\n",strlen(&arr+1)); //随机值 printf("%d\n",strlen(&arr[0]+1)); //随机值 return 0; }
#include <stdio.h> int main() { char arr[]="abcdef"; printf("%d\n",sizeof(arr));//7 整个数组大小 printf("%d\n",sizeof(arr+0));//4 首元素的地址 printf("%d\n",sizeof(*arr));//1 首元素大小 printf("%d\n",sizeof(arr[1]));//1 第二个元素 printf("%d\n",sizeof(&arr));//4 数组的地址 printf("%d\n",sizeof(&arr+1));//4 整个数组之后的地址 printf("%d\n",sizeof(&arr[0]+1));//4 第二个元素的地址 printf("%d\n",strlen(arr));//6 从a开始找 printf("%d\n",strlen(arr+0));// 6 //printf("%d\n",strlen(*arr));// error //printf("%d\n",strlen(arr[1]));//error printf("%d\n",strlen(&arr)); // 6 从a开始找 printf("%d\n",strlen(&arr+1)); //随机值 printf("%d\n",strlen(&arr[0]+1));//5从b开始找 return 0; }
3.二维数组。
#include <stdio.h> int main() { int a[3][4]={0}; printf("%d\n",sizeof(a));//48 整个数组大小 printf("%d\n",sizeof(a[0][0]));//4 首元素 printf("%d\n",sizeof(a[0]));//16 第一行元素 printf("%d\n",sizeof(a[0]+1));//4 第一行元素的第二个地址 printf("%d\n",sizeof(a+1));//4 第二行地址 printf("%d\n",sizeof(&a[0]+1));//4 第二行地址 printf("%d\n",sizeof(*a));//16 第一行 printf("%d\n",sizeof(*&a));//48 整个数组 printf("%d\n",sizeof(a[3]));//16 第四行 return 0; }
相关文章推荐
- C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
- 【c语言】strlen与sizeof对数组和指针的求法
- c语言之数组 sizeof strlen
- C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
- [c语言]sizeof() 居然不是函数?!!strlen()和sizeof()纠缠在一起再碰到不同类型的数组,你还能分辨清吗?
- c语言数组遇上sizeof和strlen
- C语言中sizeof与strlen区别
- C语言sizeof 和 strlen 的区别
- C语言之——strlen()与sizeof()
- C语言中sizeof与strlen的用法区别
- C语言中sizeof与strlen的区别是什么
- C语言的sizeof和strlen
- C语言中sizeof计算数组如何实现?
- C语言中sizeof与strlen区别
- c语言中的sizeof()与strlen()的区别。
- C语言中sizeof以及多维数组的应用
- C语言中sizeof与strlen区别
- sizeof, strlen, 指针和数组作为函数参数
- C语言中sizeof与strlen区别
- 字符数组 字符指针 sizeof strlen 的区别