为了账号安全,请及时绑定邮箱和手机立即绑定

这个函数memset(&State[0][0],0,16)是什么意思?

这个函数memset(&State[0][0],0,16)是什么意思?

慕妹3242003 2019-01-27 09:05:48
这个函数memset(&State[0][0],0,16)是什么意思?
查看完整描述

4 回答

?
MM们

TA贡献1886条经验 获得超2个赞

以State[0][0]的地址为起点,将其后的16个字节设置为0。如果State数组被分配了连续的空间,相当于把2维数组State的前16个字节设置为0;比如State是一个int[2][5],因为int是4字节,所以该语句就是将State[0]中的前4个int设为0;如果State是int[2][3],就是将State[0]全部设为0,并将State[1]的第一个int设为0。

查看完整回答
反对 回复 2019-03-14
?
SMILET

TA贡献1796条经验 获得超4个赞

memset(str,0,80)是用0来初始化以地址str开始的80个连续单元..
memset函数具体的用法是:
memset() 函数常用于内存空间初始化。如: char str[100]; memset(str,0,100); memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, '\0', sizeof(a)); memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。 strcpy就只能拷贝字符串了,它遇到'\0'就结束拷贝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。

查看完整回答
反对 回复 2019-03-14
?
暮色呼如

TA贡献1853条经验 获得超9个赞

State是个数组,
这个命令是从State数组的首地址开始,以数值0('\0')填充16个连续的字节。
可以称作这块内存的初始化。

查看完整回答
反对 回复 2019-03-14
?
波斯汪

TA贡献1811条经验 获得超4个赞

&State[0][0]是获取二维数组第一行的第一列的元素的地址.这很别扭.直接
memset( (void*)State,0, 16 )就可以了.从state开始的地址的前16个字节设置为零.

查看完整回答
反对 回复 2019-03-14
  • 4 回答
  • 0 关注
  • 956 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信