一个memset函数使用时的坑
生活随笔
收集整理的這篇文章主要介紹了
一个memset函数使用时的坑
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
平時使用memset函數(shù)都是用來初始化字符串,從來沒有注意過它具體是怎么實現(xiàn)的,最近無意中發(fā)現(xiàn)原來這個函數(shù)里面還是有坑的。
我嘗試用它來初始化整型數(shù)組
int array[10];
memset(array, 1, sizeof(a)); 我原本是想將數(shù)組元素全部初始化為1,可是卻是這樣的:
一開始不明白為什么會這樣,查了以后才知道,void *memset(void *s, int ch, size_t n)并不是直接把 ch 的值賦到 s 的元素上去。
我們先來看看這個神奇的數(shù)字:16843009 的二進制表示形式是什么:
有沒有看出什么規(guī)律?
也許你已經(jīng)看出來了,為了更明顯一些,我們換個角度看:
原來memset是以字節(jié)為單位對每個元素賦值的
再來個例子:
因為字符型元素只占用一個字節(jié),所以對字符串用memset初始化直接簡單的用 ch 對每個元素賦值就行了
再來看一個例子:
平常使用memset函數(shù)注意規(guī)避這個坑足夠了,如果你想了解更多關(guān)于memset函數(shù)的實現(xiàn)原理,請再去查看其它資料深入學(xué)習(xí),我在此就不多做介紹了。
總結(jié)
以上是生活随笔為你收集整理的一个memset函数使用时的坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用PHP数组函数总结
- 下一篇: 如何更新 Linux 内核来提升系统性能