开发者社区> 问答> 正文

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个字节的值)进行初始化呢? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-09 13:49:15 625 0
1 条回答
写回答
取消 提交回答
  • 奇怪的是,之所以这个作品用-1是完全一样的,这个作品以零的原因:在二进制补码表示,-1拥有1S IN的所有位,无论整数的大小,在一个地区做馅用字节填充all 在二进制补码硬件上1生成带-1符号ints,longs和shorts 的区域。

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

    2020-02-09 13:49:32
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载