網站首頁 編程語言 正文
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
相關推薦
- 2022-11-10 ASP.NET?MVC使用Quartz.NET執行定時任務_實用技巧
- 2022-06-18 Elasticsearch之文檔批量操作示例_其它綜合
- 2022-06-23 巧妙使用python?opencv庫玩轉視頻幀率_python
- 2022-08-17 C語言超全面講解字符串函數_C 語言
- 2022-06-17 C#關鍵字之重載Overload介紹_C#教程
- 2022-04-09 一起來了解python的if流程控制_python
- 2022-04-17 WPF框架Prism中使用MVVM架構_實用技巧
- 2023-07-16 callBack: function(res){} 與 callBack: res =>{}
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支