4 回答
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。
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的内存地址溢出。
TA贡献1811条经验 获得超4个赞
&State[0][0]是获取二维数组第一行的第一列的元素的地址.这很别扭.直接
memset( (void*)State,0, 16 )就可以了.从state开始的地址的前16个字节设置为零.
添加回答
举报