日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中sizeof函數踩過的坑總結_C 語言

作者:LittCroco ? 更新時間: 2022-06-10 編程語言

sizeof很簡單,但是卻很容易令人踩坑。

正文

先來看這樣一段代碼

int main()
{
int i=2;
printf("%d\n",sizeof(i++));
printf("%d\n",i);
return 0;
}

非常簡單的一段代碼

當時我認為答案應該是

4

3

可是結果卻是出乎我的意料了

這是為什么呢?

下面來仔細說一下

在這里插入圖片描述

在這里插入圖片描述

通過調試觀察雖然確實有i++這么一句代碼,但是卻沒有實現。說到這里很多人可能犯了和我一樣的錯誤,認為sizeof是一個函數。

其實并非如此,sizeof其實是單目操作符的一種,可以求變量類型所占用的空間,單位是字節。

說到這里就應該和strlen函數區分開,strlen函數求的是字符串的字符數,不包括’\0’,而sizeof由于求的是字節數,會將’\0’計算上。

再說幾個與sizeof這種情況類似的,避免踩坑。

邏輯操作符 &&和 ||也會產生這樣的坑

來看這樣一道題

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,對于&&邏輯與來說,答案已經顯而易見了,0和任何數邏輯與都等于0。所以后面的b++,和c++并沒有被計算到。

我想邏輯或也是同理吧,只有有一個”真“,邏輯或得到的就是”真“。

這就意味著c++并沒實現。

在這里插入圖片描述

原文鏈接:https://blog.csdn.net/m0_61899382/article/details/123360854

欄目分類
最近更新