memset函数


memset是计算机中C/C++语言函数。
void **memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
作用:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。


简单示例1:
如下demo是可以的,能把数组中的元素值都设置成字符1

#include 
#include 
using namespace std;
int main()
{
    char a[5];
    memset(a,'1',5);
    for(int i=0;i<5;i++)
        cout<

而,如下程序想把数组中的元素值设置成1,却是不可行的

#include 
#include 
#include 
using namespace std;
int main()
{
    int a[5];
    memset(a,1,20);
 
   
                    //也等价于memset(a,1,sizeof(a));.
    for(int i=0;i<5;i++)
        cout<

问题是:
1.第一个程序为什么可以,而第二个不行?
因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用 memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。
如果用memset(a,1,20),就是对a指向的内存的20个字节进行赋值,每个都用数1去填充,转为二进制后,1就是00000001,占一个字节。一个int元素是4字节,合一起是0000 0001,0000 0001,0000 0001,0000 0001,转化成十六进制就是0x01010101,就等于16843009,就完成了对一个int元素的赋值了。

简单示例2:

#include 
#include 
#include 
 
int main(void)
{
    char buffer[]="Helloworld\n";
    printf("Buffer before memset:%s\n",buffer);
    memset(buffer,'*',strlen(buffer));
    printf("Buffer after memset:%s\n",buffer);
    return 0;
}

输出结果:
Buffer before memset:Helloworld
Buffer after memset:***********
(总结来源百度百科)

你可能感兴趣的:(memset函数)