memset使用详解,你真的会按字节初始化吗?

185 阅读1分钟

memset(arr,initial_value,sizeof arr)

  • 按字节(B)进行初始化,所以在初始化选择时,使用16进制进行初始化
  • 如初始化int arr[],每个数组元素都是int型占4B
  • 如初始化是0x7F==0111,1111。8bit==1B,则int型4B中,每一个B都是0111,1111拼凑起来的
  • 在memset中,8位二进制数是带符号的
    • 0111,1111 0111,1111 0111,1111 0111,1111
    • 0111,1111 0111,1111 0111,1111 0111,1111==2139062143
    int a[5];
    memset(a, 0x7f, sizeof a);
    for (int i = 0; i < 5; i++) printf("%d\n", a[i]);
    /*
    2139062143
    2139062143
    2139062143
    2139062143
    2139062143
    */