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;
}