1. 數(shù)組初始化:
即定義時(shí)即賦值:
int a[4]={0}; //每一個位置的int都為0
int b[4]={1}; //只有第一個元素為1,其他都為0
所以要想把數(shù)組初始化為其他值,則需要一個個的指定值: int b[4]={1,2,3,4};//比如指定為1,2,3,4
或者先統(tǒng)一初始化為0,再利用for循環(huán)改變數(shù)組的每一個元素。
2. 數(shù)組的賦值:
在定義過后,需要給數(shù)組每一個元素賦值時(shí),不能再像初始化那樣:
a[4] = {1,3,5,7}; //這是錯誤的,
a={1,3,5,7};//這還是錯的。
只能利用for循環(huán),或者利用memcpy從其他內(nèi)存拷貝一份值過來。
當(dāng)使用完成后,局部數(shù)組會由函數(shù)自動釋放,全局?jǐn)?shù)組則需進(jìn)行下清零。
這時(shí)候就要用到memset函數(shù)。
memset(a,0,sizeof(a));
或者memset(a,0,sizeof(int)*4); //sizeof取的是字節(jié)。 memset是按字節(jié)進(jìn)行賦值的,這里為16個字節(jié):4*4
3. memset函數(shù):memset(void *s, int ch,size_t n); // C語言:#include <string.h> 或者 C : #include <cstring>
一般只用來清零,或者初始化局部數(shù)組為0,以免出現(xiàn)局部數(shù)組的每一個元素為亂值。所以第二個參數(shù)一般為0或者-1.
要注意:
3.1 memset是按字節(jié)進(jìn)行賦值,
所以假設(shè)你想利用memset給a數(shù)組每一位置為1,memset(a,1,sizeof(a)); // 這時(shí)候你去打印a的每一位,值都是16843009,而非你期望的1
原因:int為四個字節(jié),這時(shí)候每個字節(jié)被memset置為1,而每一個元素都是一個int,即 01 01 01 01,讀取十六進(jìn)制為 0x01010101,十進(jìn)制為 16843009
不過 char類型的可以使用memset隨意賦值為自己想要的,因?yàn)?char只占一個字節(jié),賦多少就是多少。
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;
}