網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
sizeof很簡(jiǎn)單,但是卻很容易令人踩坑。
正文
先來(lái)看這樣一段代碼
int main() { int i=2; printf("%d\n",sizeof(i++)); printf("%d\n",i); return 0; }
非常簡(jiǎn)單的一段代碼
當(dāng)時(shí)我認(rèn)為答案應(yīng)該是
4
3
可是結(jié)果卻是出乎我的意料了
這是為什么呢?
下面來(lái)仔細(xì)說(shuō)一下
通過(guò)調(diào)試觀察雖然確實(shí)有i++這么一句代碼,但是卻沒(méi)有實(shí)現(xiàn)。說(shuō)到這里很多人可能犯了和我一樣的錯(cuò)誤,認(rèn)為sizeof是一個(gè)函數(shù)。
其實(shí)并非如此,sizeof其實(shí)是單目操作符的一種,可以求變量類(lèi)型所占用的空間,單位是字節(jié)。
說(shuō)到這里就應(yīng)該和strlen函數(shù)區(qū)分開(kāi),strlen函數(shù)求的是字符串的字符數(shù),不包括’\0’,而sizeof由于求的是字節(jié)數(shù),會(huì)將’\0’計(jì)算上。
再說(shuō)幾個(gè)與sizeof這種情況類(lèi)似的,避免踩坑。
邏輯操作符 &&和 ||也會(huì)產(chǎn)生這樣的坑
來(lái)看這樣一道題
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; }
答案:
這里大家或許就有疑問(wèn)了,這個(gè)b為什么不等于2呢,這個(gè)c為什么不等于4呢,這不是后置++了嗎?
其實(shí)邏輯操作符在運(yùn)算過(guò)程中并不會(huì)把每個(gè)對(duì)象都計(jì)算到,就拿這個(gè)舉例子,由于是后置++,a此時(shí)還等于0,對(duì)于&&邏輯與來(lái)說(shuō),答案已經(jīng)顯而易見(jiàn)了,0和任何數(shù)邏輯與都等于0。所以后面的b++,和c++并沒(méi)有被計(jì)算到。
我想邏輯或也是同理吧,只有有一個(gè)”真“,邏輯或得到的就是”真“。
這就意味著c++并沒(méi)實(shí)現(xiàn)。
原文鏈接:https://blog.csdn.net/m0_61899382/article/details/123360854
相關(guān)推薦
- 2022-09-17 PyTorch?模型?onnx?文件導(dǎo)出及調(diào)用詳情_(kāi)python
- 2022-03-28 Python?pandas之多級(jí)索引取值詳解_python
- 2024-01-16 URLClassLoader詳解
- 2022-04-01 Unable to connect to the server: x509: certificate
- 2022-09-26 android Recycleview的側(cè)滑點(diǎn)擊刪除功能實(shí)現(xiàn)
- 2023-04-01 Pytorch基礎(chǔ)之torch.randperm的使用_python
- 2022-08-19 WPF使用DrawingContext實(shí)現(xiàn)二維繪圖_C#教程
- 2023-07-16 callBack: function(res){} 與 callBack: res =>{}
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支