數組初始化的時候常用for()循環,不過如果考慮效率的話,最好用memset(),下面簡單介紹以下memset()。
函數原型:
void *memset(void *s, int ch, size_t n)
函數解釋:將s中前n個字節替換為ch并返回s;
memset:它包含在<memory.h>或者<string.h>中。作用是在一段內存塊中填充某個給定的值,它的操作對象為單個字節,是對較大的結構體或數組進行清零操作的一種最快方法。
提到memset()就不得不提到sizeof(),因為sizeof()使用不好可能給memset()帶來很隱蔽的錯誤:
int some_func(struct something *a){
…
…
memset(a, 0, sizeof(a));
…
}
上面這段代碼是不能達到對a[]清零的目的的,因為
some_func()函數的參數已退化為指針,而不是數組對象,因此這里的sizeof(a)在32位機器上返回的應該是4,而不是a[]數組的長度(所占字節數)。
sizeof是C/C++中的一個操作符(operator),而不是函數,其作用就是返回一個具有明確類型的對象或者類型所占的內存字節數。
它有以下特點:
1.它在程序編譯時被執行
2.它的操作對象可以是某個對象,或者某種類型
3.當適用于一個變量時, sizeof 返回實際的大小,當適用于靜態的空間數組, sizeof 返回全部數組的尺寸。
看完百科上關于sizeof()的介紹,心中頓時產生了一堆問號,真是學的越深入,不懂得越多啊╮(╯﹏╰)╭
以上內容均來自百度百科,感謝默默編輯詞條的大神們。
詳情參閱:
http://baike.baidu.com/view/982208.htmhttp://baike.baidu.com/view/1078660.htm
posted on 2012-08-07 23:38
小鼠標 閱讀(3187)
評論(2) 編輯 收藏 引用 所屬分類:
C語言