辣鸡然然的日志——003运算符sizeof和函数strlen

(以下全摘自网络,侵删致歉)

在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符,对 sizeof() 的处理在编译阶段进行。

作用 判断数据类型长度符的关键字
过程 字节数的计算在程序编译时进行
返回值 内存所占字节数

sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。

sizeof有两种语法形式,如下:
sizeof(type_name);//sizeof(类型);
sizeof object;//sizeof对象;

所以,
int i;
sizeof(i);//ok
sizeof i;//ok
sizeof(int);//ok
sizeof int;//error

sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。sizeof对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。
strlen计算字符串的具体长度,sizeof计算声明后所占的内存数。

strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

头文件 string.h(C)或cstring(C++)
格式 strlen(字符指针表达式)
功能 计算给定字符串的长度
返回值 给定字符串(不包括“\0”)长度

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
https://m.baidu.com/from=1012852y/s?word=strlen&sa=tb&ts=1109211&t_kt=0&ie=utf-8&rsv_t=cdf8SIs0dqJqpP2fWfzQYCDr6X1MF5uQn6J2XFIMC%252ByGp8kY3aXA4ax6Lx6yyXc&rsv_pq=8442821039947213956&ss=100&tj=1&rqlang=zh&sugid=15108970644672845905&rsv_sug4=4029&inputT=2449&oq=sizeof%E5%92%8Cstrlen%E7%9A%84%E5%8C%BA%E5%88%AB
strlen与sizeof的区别:

strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。

sizeof计算声明后所占的内存数(字节大小),不是实际长度。

sizeof是一个取字节运算符,而strlen是个函数。

sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定义的长度。若未给出定义的大小,分类讨论,对于字符串数组,字符大 小等于实际的字符个数+1;对于整型数组,字符个数为实际的字符个数。字符串每个字符占1个字节,整型数据每个字符占的字节数需根据系统的位数类确定,32位占4个字节。   

sizeof是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。

猜你喜欢

转载自www.cnblogs.com/jun-ruo-sui-nian/p/diary_003.html