memset如何通过-1初始化整数数组?

吊床:

手册页说,约memset

#include <string.h>
void *memset(void *s, int c, size_t n)

memset()功能填充第一n 字节由指向的存储器区域的s具有恒定字节c

很明显,memset不能使用它来初始化int数组,如下所示:

int a[10];
memset(a, 1, sizeof(a));  

这是因为int用4个字节表示(例如),并且无法获得array中整数的期望值a
但是我经常看到程序员memset用来将int数组元素设置为0-1

int a[10];
int b[10];
memset(a, 0, sizeof(a));  
memset(b, -1, sizeof(b));  

根据我的理解,用整数初始化0是可以的,因为0可以用1个字节表示(在这种情况下我可能错了)。但是如何b-1(4个字节的值)初始化呢?

dasblinkenlight:

奇怪的是,之所以这个作品用-1是完全一样的,这个作品以零的原因:在二进制补码表示-1拥有1S IN的所有位,无论整数的大小,在一个地区做馅用字节填充all 在二进制补码硬件上1生成带-1符号ints,longs和shorts 的区域

在不同于二进制补码的硬件上,结果将有所不同。-1整数常数将被转换成一个unsigned char全部为,因为标准是特定的转换必须如何进行。但是,1根据平台的规则,所有位都设置为的字节区域将被解释为整数值。例如,在符号和大小的硬件上,数组的所有元素将包含对应类型的最小负值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章