不一定是给前16个元素赋值为0,是从state[0][0]所在的首地址开始,给连续16个字节赋值为0 #include void *memset(void *s, int c, size_t n); description the memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c. //memset函数以常量字节c填充s所指向的内存区前n个字节 如果是char state[m][n],你的说法是对的,如果是其他类型,如int state[m][n]就不对了,一个int占四个字节,memset(&state[0][0],0,16)就只会给前四个元素赋值为0了。&State[0][0]是获取二维数组第一行的第一列的元素的地址.这很别扭.直接memset( (void*)State,0, 16 )就可以了.从state开始的地址的前16个字节设置为零.以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。