1. 程式人生 > >陣列初始化總結

陣列初始化總結

整型陣列

初始化陣列為0:
1.靜態變數和全域性變數初始化時會自動設為0。

#include<stdio.h>
int array[100];
int main()
{

}
或者
int main()
{
	static int array[100];
}

2.對於區域性陣列我們還有簡寫的初始化語法。如果一個數組被部分初始化,沒有被初始化的元素會被自動設定為相應型別的0。

int main()
{
	int array[10]={0};
}

3.使用函式初始化陣列memset

#include<string.h>
int main()
{
	int array[10];
	memset(array,0,10*sizeof(int));
}

memset是計算機中C/C++語言初始化函式。作用是將某一塊記憶體中的內容全部設定為指定的值, 這個函式通常為新申請的記憶體做初始化工作。在標頭檔案string.h中。
**void memset(void s, int ch, size_t n);
函式解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s 。
memset函式也是以位元組為單位進行賦值的。

int main()
{
	char array1[5];
	memset(array1,'1',5);
	int array2[5];
	memset(array2,1,5*4);
}

使用memset函式
將array1字元陣列初始化為1成功
將array2整型陣列初始化為1失敗
原因是memset函式時以位元組為單位進行賦值的。
array1中將‘1’替換給1個位元組,使得每個字元為‘1’
而array2中將1替換給1個位元組,一個數組元素為4個位元組
元素的二進位制碼為:
00000001 00000001 00000001 00000001
轉化成十六進位制就是0x01010101,就等於16843009,就完成了對一個int元素的賦值了。
使用memset函式的注意點
1.memset函式按位元組對記憶體塊進行初始化,所以不能用它將int陣列初始化為0和-1之外的其他值(除非該值高位元組和低位元組相同)。-1二進位制碼為11111111
2.:memset(void *s, int ch,size_t n);中ch實際範圍應該在0~~255,因為該函式只能取ch的後八位賦值給你所輸入的範圍的每個位元組.
字元陣列初始化


在C語言程式設計中,當我們宣告一個字串陣列的時候,常常需要把它初始化為空串。總結起來有以下三種方式:

(1) char str[10]="";
(2) char str[10]={’\0’};
(3) char str[10]; str[0]=’\0’;
第(1)(2)種方式是將str陣列的所有元素都初始化為’\0’,而第(3)種方式是隻將str陣列的第一個元素初始化為’\0’。如果陣列的size非常大,那麼前兩種方式將會造成很大的開銷。

所以,除非必要(即我們需要將str陣列的所有元素都初始化為0的情況),我們都應該選用第(3)種方式來初始化字串陣列。