【C语言】你可能对 sizeof() 有点误解。。。
各位,今天還是按照慣例給大家分享一個C語言容易出現的小錯誤,這也是跟sizeof有關的,問題雖小,卻可管中窺豹,話不多說,代碼先行:
#include int?main() {??int?i;??????i?=?8;?????printf("%d\n",i);?????printf("%d\n",sizeof(i ));??????printf("%d\n",i);?????return?0; }問輸出的值是什么?如果你上來就說8,4,9 那就錯了。當然第一個是8沒問題,第二個是4也沒問題(32位int類型為4),主要錯在了第三個數,其實本題著重考察的是我們對sizeof的理解。
首先我們要澄清一個誤區:sizeof不是函數,不是函數,不是函數!重要的話說三遍,它是一個關鍵字,更準確地說它是一個單目運算符!其運算符的含義是:求出對象在計算機內存中所占用的字節數。根據C99的規范,sizeof是一個編譯時刻就起效果的運算符,在其內的任何運算都沒有意義,所以sizeof(i )在編譯的時候被翻譯成sizeof((i 的數據類型)),也就是4(32位int),換言之編譯時sizeof(i )就被4取代了!因此當程序最終執行的時候,sizeof里面不會有任何的i 運算,所以i的值是不變的,這就是本題想考察的點了。
其次,我們注意一下,sizeof()和strlen之間的區別,請看以下代碼:
#include #include? int?main() {??char?word[]?=?"xuedinge"?;???printf("?%d?",strlen(word));??#8;???printf("?%d?",sizeof(word)/sizeof(char));??#9; }其實只是牽涉到字符串的存儲問題:"xuedinge"字符串在存儲的時候,存儲為x?u?d i n g e?\0,總共占用了9個內存單元,sizeof()計算的時候會將\0計算在內,所以為9,strlen只是計算長度,不會把\0包括在內,所以為8,strlen為函數,sizeof為運算符。
當然,關于sizeof還有其他許多用法和需要注意的地方,比如它的對象可以是表達式或者數據類型名,當對象是表達式時,括號可省略等等。。。同時sizeof在各種筆試面試中出現的幾率非常高,希望大家對它進行熟練掌握,今天這里我們就不展開了,就到這里吧,感謝各位的耐心閱讀。
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的【C语言】你可能对 sizeof() 有点误解。。。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在电脑上重新设置路由器如何用电脑重置
- 下一篇: 怎样设置路由器的桥接维盟路由器如何设置桥