【C语言之区分sizeof 和 strlen】

您所在的位置:网站首页 sizeof的头文件 【C语言之区分sizeof 和 strlen】

【C语言之区分sizeof 和 strlen】

2023-06-28 04:44| 来源: 网络整理| 查看: 265

C语言之区分sizeof 和 strlen 详解C语言sizeof 和 strlen1、单目操作符1.1、详解sizeof单目操作符1.2、sizeof代码部分1.2.1、sizeof例程11.2.2、sizeof例程21.2.3、sizeof例程3 2、详解strlen函数2.1、strlen代码部分2.1.1、strlen例程1 3、区别strlen函数和sizeof操作符3.1、sizeof( )和strlen( )的运用例程1 4.结束语

详解C语言sizeof 和 strlen

前言: 首先,我们需要明白它们的根本区别,sizeof属于关键字也属于单目操作符,而strlen属于库函数

/知识点回顾/

1、单目操作符

单目操作符:单目运算符对应只有一个操作数 常见的单目操作符:

常见的单目操作符描述!逻辑非’ - ‘负’ + ‘正&取地址sizeof计算一个数据类型的大小~取反–减减++加加’ * ’解引用( )强制类型转换 1.1、详解sizeof单目操作符

先大概看一下关于sizeof的技术文档

sizeof expression

The sizeof keyword gives the amount of storage, in bytes, associated,with a variable or a type (including aggregate types). This keyword,returns a value of type size_t. The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses). When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof returns the size of the entire array. The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.

说明:

运算符表达式sizeof关键字给出与变量或类型(包括聚合类型)相关联的存储空间(以字节为单位) 该关键字返回size_t类型的值。 表达式要么是标识符,要么是类型强制转换表达式(用圆括号括起来的类型说明符)。 当应用于结构类型或变量时,sizeof返回实际大小,其中可能包括为对齐而插入的填充字节。 当应用于静态维度数组时,sizeof返回整个数组的大小。 sizeof操作符不能返回动态分配的数组或外部数组的大小。

小结: sizeof的功能是计算一个数据类型的大小,这个类型可以是数组、函数、指针、对象等,单位为字节,它的返回值是size_t类型,也就是unsigned int类型,是一个无符号整数。 注意:sizeof不是一个函数,它是一个运算符,所以它不需要包含任何头文件。

1.2、sizeof代码部分

接下来通过代码例程分解sizeof各个知识点: 1.返回size_t类型的值,sizeof返回实际大小,可能包括为对齐而插入的填充字节 2.当应用于静态维度数组时,sizeof返回整个数组的大小 3.sizeof操作符不能返回动态分配的数组或外部数组的大小

1.2.1、sizeof例程1

说明: 返回size_t类型的值(无符号整型),sizeof返回实际大小,可能包括为对齐而插入的填充字节(如:空格)

/*例程1*/ #include int main() { printf("size_t1 = %d\n", sizeof(int));//sizeof参数可以是类型,这里返回的就是int型字节大小 int a = 10; printf("size_t2 = %d\n", sizeof(a));//计算a所占用的空间大小,单位是字节,且a为整型变量 char b = 'B'; printf("size_t3 = %d\n",sizeof(b));//计算a所占用的空间大小,单位是字节,且b为字符型变量 char arr1[] = "hello"; printf("%d\n",sizeof(arr1)); //计算包括为对齐而插入的填充字节(如:空格) char arr2[] = "h e l l o"; printf("%d\n", sizeof(arr2)); return 0; }

如图所示:

在这里插入图片描述

1.2.2、sizeof例程2

说明: 当应用于静态维度数组时,sizeof返回整个数组的大小

/*例程2*/ #include int main() { char arr[10] = { 0 }; //计算arr数组元素所占用的空间大小,单位是字节 printf("%d\n", sizeof(arr[1]));//1 printf("%d\n", sizeof(arr));//10---char数组字节1---10个就是1*10 = 10 //同理:int类型那么就是10*4 = 40 return 0; }

如图所示: 在这里插入图片描述

1.2.3、sizeof例程3

说明: sizeof操作符不能返回动态分配的数组或外部数组的大小(特别易错)

/*例程3*/ #include int main() { short a = 5; int b = 10; printf("%d\n", sizeof(a = b + 2));//输出2 ---- 单位字节,仍为short类型 //注意:小的空间内存放不进比它大的数据,会数据截断,仍为short类型,a+2也不会运算 //且sizeof(参数),参数的计算不对参数外起作用 printf("%d\n", a);//输出5 ---- a+2也不会运算 int arr1[] = { 1,2,3,4 }; int arr2[] = { 1, 2, (3, 4), 5 }; //注意:这里的(3,4)是逗号运算符,计算结果作为数组的元素,数组类型相同元素个数相同,所以字节空间大小相同 printf("%d\n", sizeof(arr1));//16 printf("%d\n", sizeof(arr2));//16 return 0; }

如图所示: 在这里插入图片描述

2、详解strlen函数

老规矩先看一下关于strlen函数的技术文档: 在这里插入图片描述 说明:

Return Value

Each of these functions returns the number of characters in string, excluding the terminal NULL. No return value is reserved to indicate an error. 原型:size_t strlen( const char *string );

小结: 1.返回类型仍然是size_t类型,参数为字符串类型,const是修饰为不可改变的变量 2.strlen的功能是计算一个指定字符串的长度,函数原型是size_t strlen(const char *s),它的返回值是size_t类型,也就是unsigned int类型,返回的是字符串的长度。 3.需要包含头文件#inlude ,参数s是字符串首地址。

注意:strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小,不包括’\0’。strlen是不会计算’\0’之后的长度的。

2.1、strlen代码部分

接下来通过代码例程了解strlen知识点: 1.返回size_t类型的值,strlen返回字符串长度

2.1.1、strlen例程1

说明: 返回size_t类型的值,strlen返回字符串长度

/*例程1*/ #include #include //使用strlen函数,需要调用头文件 ---- int main() { char arr[] = "hello"; printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0' return 0; }

如图所示: 在这里插入图片描述

3、区别strlen函数和sizeof操作符

小结: a、sizeof会将空字符\0计算在内,而strlen不会将空字符\0计算在内。 b、sizeof是操作符(关键字),它结果类型是size_t,它在头文件中typedef为unsigned_int类型,而strlen是函数。 c、sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’‘\0’'结尾的。

3.1、sizeof( )和strlen( )的运用例程1 /*例程1*/ #include #include int main() { char str[] = "hello bit"; //hello bit\0 printf("%d %d\n", sizeof(str), strlen(str));//10 9 //strlen()函数求字符串长度 //sizeof关键字计算变量/类型所占用的内存大小,单位字节 return 0; } 4.结束语

相信看到这里大家对于strlen是什么?和sizeof是什么?有了更加深入的理解了,如果对你有所帮助,不要客气一件三连哦让更多人阅读,谢谢您勒!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3