详解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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <string.h>,参数s是字符串首地址。
注意:strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小,不包括’\0’。strlen是不会计算’\0’之后的长度的。
2.1、strlen代码部分
接下来通过代码例程了解strlen知识点:
1.返回size_t类型的值,strlen返回字符串长度
2.1.1、strlen例程1
说明:
返回size_t类型的值,strlen返回字符串长度
/*例程1*/
#include <stdio.h>
#include <string.h>
//使用strlen函数,需要调用头文件 ---- <string.h>
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’'结尾的。文章来源:https://www.toymoban.com/news/detail-506640.html
3.1、sizeof( )和strlen( )的运用例程1
/*例程1*/
#include <stdio.h>
#include <string.h>
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是什么?有了更加深入的理解了,如果对你有所帮助,不要客气一件三连哦让更多人阅读,谢谢您勒!文章来源地址https://www.toymoban.com/news/detail-506640.html
到了这里,关于【C语言之区分sizeof 和 strlen】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!