陣列初始化總結
整型陣列
初始化陣列為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)種方式來初始化字串陣列。