源码角度看memset初始化数组

memset经常被用来做初始化,memset(ptr,0,sizeof ptr)初始化为0,memset(ptr,-1,sizeof ptr)初始化为-1,除此以外的值很少用到,原因看memset的源码。

void* memset(void* s,int c,size_t n)
{
    const unsigned char uc=c;
    unsigned char* sc;
    for(sc=s;n>0;++sc,--n)
        *sc=uc;
    return s;
}

函数把输入的c转化为unsigned char,长度为1字节,也就是说0会被变成00000000,-1会被变成11111111,再一次对区域内的内存赋值,int 11111111 11111111 11111111 11111111 的值即为-1,00000000 00000000 00000000 00000000即为0,而假如c如果是初次以外的值,比如是1的话,那就会变成00000001 00000001 00000001 00000001 和1相去甚远。

猜你喜欢

转载自blog.csdn.net/qq_33113661/article/details/88766740