數組初始化及賦值的方法,memset的使用


1. 數組初始化:

  即定義時即賦值:

  int a[4]={0}; //每一個位置的int都為0

  int b[4]={1}; //只有第一個元素為1,其他都為0

  所以要想把數組初始化為其他值,則需要一個個的指定值: int b[4]={1,2,3,4};//比如指定為1,2,3,4

  或者先統一初始化為0,再利用for循環改變數組的每一個元素。

2. 數組的賦值:

  在定義過后,需要給數組每一個元素賦值時,不能再像初始化那樣: 

             a[4] = {1,3,5,7}; //這是錯誤的,

             a={1,3,5,7};//這還是錯的。

  只能利用for循環,或者利用memcpy從其他內存拷貝一份值過來。

  當使用完成后,局部數組會由函數自動釋放,全局數組則需進行下清零。

  這時候就要用到memset函數。

    memset(a,0,sizeof(a));

  或者memset(a,0,sizeof(int)*4);   //sizeof取的是字節。  memset是按字節進行賦值的,這里為16個字節:4*4

 

3. memset函數:memset(void *s, int ch,size_t n);    // C語言:#include <string.h> 或者 C++:  #include <cstring>

一般只用來清零,或者初始化局部數組為0,以免出現局部數組的每一個元素為亂值。所以第二個參數一般為0或者-1.

要注意:

  3.1 memset是按字節進行賦值,

  所以假設你想利用memset給a數組每一位置為1,memset(a,1,sizeof(a)); // 這時候你去打印a的每一位,值都是16843009,而非你期望的1

        原因:int為四個字節,這時候每個字節被memset置為1,而每一個元素都是一個int,即 01 01 01 01,讀取十六進制為 0x01010101,十進制為 16843009

        不過 char類型的可以使用memset隨意賦值為自己想要的,因為 char只占一個字節,賦多少就是多少。

   e.g.:

                char a[3]={'a' , 'b', 'c'};

                memset(a, 1,sizeof(a));

      for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){

        printf("a[%u]=[%u]\n",i,a[i]);                   //得到a[1]=1; a[2]=1; a[3]=1;

       }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM