栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

对于strlen函数和sizeof操作符的细致研究

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对于strlen函数和sizeof操作符的细致研究

一,strlen函数的介绍

strlen是C语言标准函数库中的标准函数,其功能是:计算字符串的长度,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符''为止,然后返回计数器值(长度不包含'')。

但是strlen返回值是size_t,这是无符号数,unsigned int

看一个代码:

看到这个代码,可能一些好兄弟,会以为输出<,但是正好相反

 为什么输出>呢,

因为返回值是unsigned int,存储时是用补码形式存储,无符号的3 - 无符号的6等于-3,补码是

1000 0000 0000 0000 0000 00000 0000 0011

因为是无符号数,没有符号位的概念,这将是一个非常大的正数。肯定大于0。所以输出>

二,sizeof操作符的介绍

sizeof是运算符,不是函数,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。

它在编译时起作用,而不是运行时。

看下面一段代码:

 

 解读代码:i是全局变量,不初始化的情况下,默认是0,局部变量不初始化的情况下,默认是随机值。i--之后变成-1了。sizeof(i)为4,因为整型是4个字节。

难道是-1>4?    NO,肯定不是的啦

因为,sizeof这个操作符,算出的结果是unsigned int,有符号整型和无符号整型比较大小的时候,会把有符号整型转化为无符号整型,

-1是很大的无符号整型数。存储的时候是补码。。。所以输出的是   >。。。。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号