C語言中sizeof函數(shù)踩過的坑總結
sizeof很簡單,但是卻很容易令人踩坑。
正文
先來看這樣一段代碼
int main()
{
int i=2;
printf("%d\n",sizeof(i++));
printf("%d\n",i);
return 0;
}
非常簡單的一段代碼
當時我認為答案應該是
4
3
可是結果卻是出乎我的意料了

這是為什么呢?
下面來仔細說一下


通過調(diào)試觀察雖然確實有i++這么一句代碼,但是卻沒有實現(xiàn)。說到這里很多人可能犯了和我一樣的錯誤,認為sizeof是一個函數(shù)。
其實并非如此,sizeof其實是單目操作符的一種,可以求變量類型所占用的空間,單位是字節(jié)。
說到這里就應該和strlen函數(shù)區(qū)分開,strlen函數(shù)求的是字符串的字符數(shù),不包括’\0’,而sizeof由于求的是字節(jié)數(shù),會將’\0’計算上。
再說幾個與sizeof這種情況類似的,避免踩坑。
邏輯操作符 &&和 ||也會產(chǎn)生這樣的坑
來看這樣一道題
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && c++;
//i = a++||++b||c++;
printf("a = %d\nb = %d\nc = %d\n", a, b, c);
return 0;
}
答案:

這里大家或許就有疑問了,這個b為什么不等于2呢,這個c為什么不等于4呢,這不是后置++了嗎?
其實邏輯操作符在運算過程中并不會把每個對象都計算到,就拿這個舉例子,由于是后置++,a此時還等于0,對于&&邏輯與來說,答案已經(jīng)顯而易見了,0和任何數(shù)邏輯與都等于0。所以后面的b++,和c++并沒有被計算到。
我想邏輯或也是同理吧,只有有一個”真“,邏輯或得到的就是”真“。
這就意味著c++并沒實現(xiàn)。

到此這篇關于C語言中sizeof()方法踩過的坑總結的文章就介紹到這了,更多相關C語言 sizeof內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

