天天看點

C++:用memset初始化數組

1、初始化數組

定義完數組之後有三種初始化方式

  • int A[20]={0};

  • int A[20]; for(i=0;i<sizeof(A)/sizeof(A[0]);i++) A[i]=0;

  • int A[20]; memset(A, 0, sizeof(A));

    此外對于全局變量和靜态變量在定義之後會由編譯器自動初始化為0
2、關于memset初始化與指派問題

memset是C/C++提供的函數初始化函數,在C中頭檔案是<string.h>,在C++中頭檔案是。在此強調一下,可以用memset給一個數組初始化為0、-1或一個很大的數,但是不要用memset函數來賦具體的值。因為:

  • void *memset(void *s, int ch, size_t n);

    memset是将從位址s開始,位元組長度為n的記憶體全部指派為ch(注意是每一個位元組都指派為ch)
  • char B[20]; memset(B, 1, sizeof(B));

    是以,當memset(記憶體位址,1,位元組數)這句的意思是要把直定的記憶體空間的值設定為0x01。對于char型數組B,正好是每個元素占一個位元組,是以這樣指派就是将數組B中所有的元素都指派為1,沒有問題。
  • int C[20]; memset(C, 1, sizeof(C));

    但是對于int型數組C,每個元素占四個位元組。也就是說将數組C中的每個元素指派成0x01010101,對應的十進制就是16843009。

繼續閱讀