欢迎光临散文网 会员登陆 & 注册

sizeof()坑了不少程序员

2020-04-22 09:56 作者:非本人登陆请忽略  | 我要投稿

获取数组的长度时不要对数组名应用 sizeof 操作符,获取字符串的度时不要对指针应用 sizeof 符;如果你要使用,那么请仔细检查 sizeof()的结果。

在 C /C++中,sizeof 坑了不少程序员。它也是各大公司争相选用的面试必备题目。简单地讲,sizeof 是一个单目操作符,不是函数。其作用就是返回一个操作数所占的内存字节数。其中,操作数可以是一个表达式或括在括号内的类型名,操作数的存储大小由操作数的类型来决定。例如,对于数组 int a[5],可以使用“sizeof(a)”来获取数组的长度,使用“sizeof(a[0])”来获取数组元素的长度。

初始化一个数组。从表面看,下面代码的输出结果应该是“0,1,2,3,4”,但实际结果却出乎我们的意料。

错误版本

是什么原因导致这个结果呢?在这里出现了一个很大问题:由于 arr 参数是一个形参,它是一个指针类型,其结果是sizeof(arr)=4,sizeof(int*)=4。“sizeof(arr)/sizeof(arr[0])”的结果为 1。

我们可以通过传入数组的长度的方式来解决这个问题


正确

计算字符串的大小,从表面看,下面代码的输出结果应该是13,但实际结果却出乎我们的意料。


错误版本

正确


sizeof 操作符容易挖坑出错。当用于函数类型、不完全类型(指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void 类型等)与位字段。例如下面的情况要小心。

不完全类型


sizeof()坑了不少程序员的评论 (共 条)

分享到微博请遵守国家法律