1樓:ddlau
1、b應該等於sizeof( std::ptrdiff_t ),通常這個值是4或者8;
2、姑且不說實現,C++標準要求不對用作sizeof、alignof、decltype、typeid、noexcept運算元的表示式求值;
我剛才說的noexcept不是noexcept specification,而是noexcept operator;
2樓:小明不聽話
看到「深入理解 sizeof 」,我只能呵呵。 sizeof 也需要深入? 如果要深入那也是 c/c++ 的型別系統, sizeof 真的是「短的不能再短」了。
sizeof 是乙個運算子,編譯期求乙個型別sizeof(int) 或是乙個表示式 size(++i) 的型別的長度!
重點: (1) 運算子,非函式; (2) 編譯期求值,所以 sizeof 的結果是常量; (3) 求的是型別的長度,表示式是不需要求值的!
sizeof(4) == sizeof(i) == sizeof(++i) == 4 ,為什麼是 4! 因為(某編譯器)一開始就規定的 int 是 4 個位元組呀,混蛋!
補充:(4) c/c++ 識別符號先宣告後使用 + 靜態型別意味著: 任何乙個表示式 (*p++)[0]->a 本身從宣告和解析上就能知道型別,不需要計算出結果才知道呀,哎喲喂!!
所以回到題目的問題:
第2個問題: sizeof(++i) 中 i 值為什麼沒有 +1 , 表示式都沒有執行! sizeof(++i) 和 sizeof(i) 和 sizeof(int) 沒有區別!
第1個問題: sizeof("123456789") 為什麼是 10 ? 因為 "123456789" 的型別是 const char[10] !
(注意 "123456789"後面有乙個默默無聞的 '\0' 字元)這是乙個 10 個字元的陣列型別, sizeof(const char[10]) == sizeof(char)*10,所以是10 !至於為什麼 "123456789" 的型別是 const char[10], 那不是 sizeof 的問題,是 c/c++ 型別系統就是這麼規定的!
sizeof("12345689"+1) == 10???!!!! 如果結果是 10, 只能說編譯器有問題吧 !"123456789"+1 的型別是 char*,所以sizeof("123456789"+1) == sizeof(char*) == sizeof(int*) == 4 or 8 !!!
(10 不能說不對, 但是感覺略奇葩,就像 c 中 sizeof(char) 其實可以不等於 1, 乙個位元組可以不是 8 bit 一樣! )
這裡就不得不提 c/c++ 中的型別轉換, 除了 sizeof 和 & 乙個陣列 T[N] 之外譬如 sizeof(char[5]), 其他時候陣列型別 T[N] 都隱式轉換為 T* , so, "123456789"+1 的型別是 char* !
c/c++ 的型別以及型別轉換這裡省略一篇作文的長度,%>_<%
3樓:喜七
sizeof 這個編譯時函式的目的是得到乙個變數或型別占用的位元組數,它的求值是由編譯器完成時,沒有執行時邏輯。像「123456789」這樣的字串字面量,型別為char[10],因為C的字串需要末尾有乙個\0來表示結束的。 所以b的結果為10應該是乙個bug。
strlen 是乙個C的庫函式,是執行時的求值過程,這個應該很好理解。
4樓:觀象士
sizeof由編譯器實現,strlen由標準庫實現。你可以寫int a[sizeof(int)];但strlen不能,可以自己研究
5樓:Xi Yang
沒搞錯的話,字串常量放在表示式中返回的是此字串常量的首址。這裡的b為10,不解sizeof針對的是型別的尺寸。第二次輸出i仍是10,"++i"為什麼沒被執行,不解sizeof是乙個編譯時完成的東西。
整個sizeof表示式在編譯時被析值成那個尺寸。裡面的東西在執行時是不存在的。
C語言中sizeof和strlen的詳細用法
sizeof和strlen是C語言中經常會用到滴兩個東西,其區分常常出現在陣列。sizeof是求乙個變數占用了多少位元組的記憶體空間,而strlen是求這個字元變數 0前有多少個字元。比如 char arr1 abcd char arr2 在C語言裡是區分雙引號 和單引號 的,我是python轉C,...
c語言的加減乘除是怎麼實現的?
大致了解簡單的過程,我們知道機器執行的都是機器碼,加減乘除這些在硬體層面CPU都提供對應的指令 我們能讀懂的是彙編指令 編譯器在編譯的時候直接將高階語言的加減乘除轉化為對應的CPU指令,完成對應的運算。比如intel彙編中 加法,addl 減法,subl 乘法,imull 除法,idivl 比如我寫...
c語言中為什麼都用 d輸出sizeof的運算結果?
buzouxun 前面的答案已經說的很好了。我補充一下,可能題主剛開始學沒留意到,d 的 d 是 decimal 的首字母,decimal 當然創造C語言的大佬沒必要瞎起名字,decimal 是十進位制 整數 的意思。sizeof 返回所佔的位元組數,就是佔了多少個 byte,那的確是個 十進位制 ...