C语言中的memset
说来惭愧,C语言学了一学期了,但直到今天刷leetcode时魔改半天发现是memset这里的问题时,经查询才真正明白memset的用法。
头文件
string.h
用法
void *memset(void *s, int ch, unsigned n);
功能
以前使用memset时,第三个参数总是写成sizeof(int)*n之类的,所以想当然的把memset的功能理解为,将n个int类型数据赋值为ch。(现在想来错的确实很离谱,因为参数传递进去就是对应内存的字节数了)但实际结果如下:
int arr[5];
memset(arr, 1, sizeof(int)*5);
>>> 16843009 16843009 16843009 16843009 16843009
这是因为memset是将unsigned n中的每个字节赋予ch值,当然这也说明ch的数值范围也只能在一个字节内。由于arr中每个数据均为int类型,占据4个字节,所以表现出来的数值为(1<<8*3+1<<8*2+1<<8*1+1=)16843009,刚好就是上述的输出。