猿问

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

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


慕妹3242003
浏览 1012回答 4
4回答

MM们

以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。

SMILET

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的内存地址溢出。

暮色呼如

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

波斯汪

&State[0][0]是获取二维数组第一行的第一列的元素的地址.这很别扭.直接memset( (void*)State,0, 16 )就可以了.从state开始的地址的前16个字节设置为零.
随时随地看视频慕课网APP
我要回答