關於sizeof和memset/memcpy的一些事

首先,sizeof是一個操作符,不是一個函數,但是當操作數爲類型名稱時需要用小括號將類型名稱包圍起來(操作數爲變量時不需要),這一規則使得sizeof看起來想一個函數一樣。其次如果sizeof的操作數爲靜態數組名時,得到的結果是整個數組所佔的空間大小(以byte爲單位),但是如果操作數動態數組時,得到只是一個指針變量所佔的用的大小(我的機器上是4byte)。這是因爲數組和指針實際上是兩個不同的對象(詳見《C專家編程》)。動態數組名就是一個指針,而靜態數組名代表的是整個數組。
memset和memcpy兩個函數的最後一個參數可以設爲0,但是不可以設爲負數,這是因爲最後一個參數的類型是size_t,而size_t的的定義爲:typedef unsigned int size_t。如果這個參數被設爲負數,函數傳參時會將其隱式轉換爲無符號數,而負數二進制表示的第一位是1,轉爲無符號數時會很大,所以必然出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章