1. 一維陣列初始化,可以只給一部分元素賦值,如下
int a[10] = ;
這樣只給前面的5個元素賦值,後5個元素為0。
將char p[8]; 看作是字元陣列的話, charp[8]=; 表示第乙個元素為0,後面的7個元素也為0;
所以 char p[8] = {}和charp[8]=一樣; 8個元素都初始化為0
2.用字串常量來使字元陣列初始化
char p[10] = "china";
前5個元素為『c』,'h','i','n','a',
第6個元素為『\0'
後4個元素為空字元,即『\0'
所以用char p[8] = "";初始化,8個元素都是『\0';
//'0'表示結束標誌,代表ascii碼為0的字元
所以用 char p[8] = ""; 和 char p[8] = ; 都能夠將8個元素初始化為0;
char p[8] = ; 當作字元陣列看待,常規陣列初始化;
char p[8] = ""; 用字串常量初始化
#define arraysize 2048
voidmain() ;
chararrayb[arraysize];
memset(array,0, arraysize);
}char arraya[arraysize] = ;
編譯是先arraya[0]賦值為0, 再呼叫memset初始化其他的陣列元素.
char arraya[arraysize] = ;
效率很難比用memset高,因為綜上分析,我覺得給一塊記憶體賦值的效率很難超越memset。
memset
語法:#include void*memset(void*buffer,intch,size_tcount);
memset()拷貝ch至buffer的前count字元中,並返回buffer。memset()對於以某一值初始化一段記憶體非常有用。例如,這個命令:
constintarray_length=300; charthe_array[array_length]; // zero out the contents of the_array memset(the_array,'\0', array_length);
…是非常有效率的方法來設定the_array中的所有值為零。
下表比較了兩種不同的方式來初始化字元陣列:for迴圈和memeset()。隨著初始化資料量的增加,memset()很清晰的做的更快:
耗時for迴圈
memset
1000
0.016
0.017
10000
0.055
0.013
100000
0.443
0.029
1000000
4.337
0.291
1:非必要情況不對記憶體使用memset清零,尤其是大塊記憶體。
2:如某結構體或記憶體塊在使用前會逐一賦值,則不需要對其進行memset初始化。
3:字串的初始化可以對其第乙個位元組賦值0。
使用strcpy拷貝的字串不需要進行初始化。
使用strncpy拷貝的字串,建議不要先進行memset全部清零,而是在strncpy後,根據字串實際長度,對字串後乙個位元組置零。
在做流程判斷的時,儘量減少使用字串比較,而採用整形或布林量比較。
4:減少結構體轉換和copy**。對結構體尤其是包含長字串的結構體複製時,建議慎用memcpy,而採取逐一賦值的方式。
5: 非必要不使用malloc和free,不但容易造成記憶體洩露,而且動態分配記憶體快時,系統的記憶體堆狀況可能會影響分配效率(比如記憶體碎片很多時)。建議對一些動態分配的陣列,採用定義乙個足夠大的陣列方式.(這裡有個問題:區域性變數的最大尺寸是多少呢,也就是說程序棧空間是多少呢?這個應該是有限制的,但是每種作業系統或編譯器的限制是多少呢,應該不能在棧空間裡定義乙個幾十m或乙個g大的陣列吧?)
6:unix程式是基本上是以程序模式執行的,可以合理使用全域性靜態變數。減少分配記憶體的開銷。在多執行緒程式裡慎用全域性變數。
C字串陣列初始化為空串
本文 在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空串。總結起來有以下三種方式 1 char str 10 2 char str 10 3 char str 10 str 0 0 第 1 2 種方式是將str陣列的所有元素都初始化為 0 而第 3 種方式是只將str陣列的第...
C字串陣列初始化為空串
在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空字元 null 總結起來有以下三種方式 1 char str 10 2 char str 10 3 char str 10 str 0 0 0和 0 是不一樣的 char a 2 這是所有字元初始化為空格 char a 10 意...
字串陣列初始化
1 char arr 10 hi 初始化字串陣列時,編譯器自動將字串最後乙個字元後面加上 0 以表示字串的結束。如果陣列的大小大於字串的長度 1,那麼把字串結束後面的元素也都初始化為 0 看這段程式 定義乙個大小為12的字串陣列 char str1 12 jiajia 讓乙個char型的指標指向這個...