[C语言]strlen与sizeof的区别与联系
2017-02-17 11:29
351 查看
strlen
原型:size_t strlen( const char *string );
strlenC语言中的一个函数,用于计算字符串的(unsigned int型)长度,不包括’\0’在内。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始遍历,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。
sizeof
sizeof是关键字不是函数,sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
两者之间的区别与联系:
1.sizeof是操作符(关键字),strlen是函数。
2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。
sizeof还可以用函数做参数,比如:
3.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
4.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而sizeof在程序编译的过程中已经计算出来了。
下面我们来看一些有关数组与指针运算的例子:
原型:size_t strlen( const char *string );
strlenC语言中的一个函数,用于计算字符串的(unsigned int型)长度,不包括’\0’在内。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始遍历,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。
sizeof
sizeof是关键字不是函数,sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
两者之间的区别与联系:
1.sizeof是操作符(关键字),strlen是函数。
2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。
sizeof还可以用函数做参数,比如:
short f() printf("%d\n",sizeof(f()));//输出的结果是sizeof(short),即2。
3.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
4.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而sizeof在程序编译的过程中已经计算出来了。
下面我们来看一些有关数组与指针运算的例子:
int a[4]={1,2,3,4}; printf("%d\n",sizeof(a)); //16,数组名单独放在sizeof中代表整个数组大小 printf("%d\n",sizeof(a+0); //4,a代表数组首元素的地址 printf("%d\n",sizeof(*a));//4,*a代表首元素 printf("%d\n",sizeof(a+1));//4,a+1代表第二个元素地址 printf("%d\n",sizeof(a[1]));//4,代表第二个元素 printf("%d\n",sizeof(&a)); //4,数组的地址,地址的大小在32位平台为4 printf("%d\n",sizeof(&a+1));//4,地址的大小 printf("%d\n",sizeof(&a[0]));//4,首元素地址的大小 printf("%d\n",sizeof(&a[0]+1));//4,第二个元素的地址 printf("%d\n",sizeof(*&a));//16,整个数组大小
char a[]={'a','b','c','d','e','f'}; printf("%d\n",sizeof(a)); //6数组名单独放在sizeof中代表整个数组大小 printf("%d\n",sizeof(a+0));//4,a代表数组首元素的地址 printf("%d\n",sizeof(*a));//1,*a代表首元素 printf("%d\n",sizeof(a[1]));//1,代表第二个元素 printf("%d\n",sizeof(&a)); //4,数组的地址,地址的大小在32位平台为4 printf("%d\n",sizeof(&a+1));//4,地址的大小 printf("%d\n",sizeof(&a[0]+1));//4,第二个元素的地址 printf("%d\n", strlen(a)); //随机值 printf("%d\n", strlen(a + 0)); //随机值 printf("%d\n", strlen(*a)); //崩溃 printf("%d\n", strlen(a[1])); //崩溃 printf("%d\n", strlen(&a)); //随机值 printf("%d\n", strlen(&a + 1)); //随机值 printf("%d\n", strlen(&a[0] + 1)); //随机值
char *a="abcdef"; printf("%d\n",sizeof(a)); //4 printf("%d\n",sizeof(a+0));//4 printf("%d\n",sizeof(*a));//1, printf("%d\n",sizeof(a[1]));//1, printf("%d\n",sizeof(&a)); //4, printf("%d\n",sizeof(&a+1));//4 printf("%d\n",sizeof(&a[0]+1));//4 printf("%d\n", strlen(a)); //6 printf("%d\n", strlen(a + 0)); //6 printf("%d\n", strlen(*a)); //崩溃 printf("%d\n", strlen(a[1])); //崩溃 printf("%d\n", strlen(&a)); //随机值 printf("%d\n", strlen(&a + 1)); //随机值 printf("%d\n", strlen(&a[0] + 1)); //随机值
相关文章推荐
- C语言-Sizeof与Strlen的区别与联系(转)
- C语言中sizeof和strlen的区别与联系
- C语言 sizeof 与 strlen 的区别与联系
- C语言的sizeof和strlen区别与联系
- C语言中sizeof与strlen区别
- Sizeof与Strlen的区别与联系
- C语言中sizeof与strlen区别
- Sizeof与Strlen的区别与联系(转)
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系(转)
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系(转)
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系
- Sizeof 与 Strlen 的区别与联系
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系