• 已解决 68344 个问题
  • 已帮助 5964 位优秀工程师

m e m set函数按字节对内存块进行初始化,所以不能用它

xbk_776023 2021-01-27 浏览量:200
m e m set函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值,这个是什么意思?低八位的话难道不可以初始化0到255吗?看了好多遍是不太懂
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 之所以memset()可以将数组初始化为0或-1(且只能初始化为这两个值,其他值初始化后读出来不是你要的值),是因为0用字节(8位)表示为0x00用int(暂定32位)表示为0x00000000同理对于有符号整型-1用字节表示为0xFF(补码),int类型表示为0xFFFFFFFF以上两种情形0x00和0x000000000xFF和0xFFFFFFFF读出来的效果是一样的,均表示同一个值,而memset()是按照字节来初始化的,只有0和-1才能满足要求(即初始化为何值读出来也为何值),假设int a[2];memset(a1sizeof(a))memset按照字节初始化(此处8字节)会造成a[0]=0x01010101a[1]=0x01010101不是想当然的1....
    • 发布于 2021-01-28
    • 举报
    • 评论 1
    • 0
    • 0
xdsnet 回复了 沃尔夫斯堡的羊:这个其实仅仅是使用中的常规惯例,并不是函数本身的限制。 回复

其他答案 数量:3
  • 实际上没有这个限制,只是大多数时候都是设置为0或者-1而已。

    只是这个是把所有缓冲区(内存块)的值都设置为一个统一的值,不能每个设置不同的而已。


    不知道你的这段话的来源啊。

    • 发布于2021-01-27
    • 举报
    • 评论 2
    • 0
    • 0
xbk_776023 回复了 xdsnet :百度百科上的 回复
xdsnet 回复了 xdsnet :其实如果你知道如何正确的读取数据,任何允许的值都是可以的,甚至这样才更方便。 回复

  • memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。

    注意只能初始化为1个值,统一的一个值。

    • 发布于2021-01-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果你没有特别的去进行字节对齐,是没有这个说法的,是可以用的。
    • 发布于2021-02-18
    • 举报
    • 评论 0
    • 0
    • 0

m e m set函数按字节对内存块进行初始化,所以不能用它