1. 為什麼c語言結構體的內存大小是24
指針大小是固定的,與指向的地址內容無關,與機器位數有關。
大小等於機器位長,64位指針大小是8,32位指針大小是4。
如果編譯器設置了對齊,那麼:
64位就是 8*3=24。
32位就是4*3=12。
你再運行看看。
2. 請教一個c語言程序 為什麼會是24 而不是22
結構體位元組對齊是與你的編譯器默認情況有關的,#pragma pack (n)宏可以改變位元組對齊值,具體可以網路搜索這個宏。
簡單解釋一下:
long(4)+char*(4)+short(2)+char(1)這時是11個位元組,而下一個是short數組,short一個變數占兩個位元組,所以short型起始地址必須是2的倍數,12是2的位數,所以從12開始放最後的那個short數組,共10位元組,加起來一共22位元組。但位元組對齊要求整個結構體的總大小必須是結構體內占空間對大的那個類型變數的倍數,比如此結構中占空間最大類型是long(4),所以結構體大小須是4的倍數,這個就湊成了24位元組,假設裡面有個double(8)類型,那就必須是8的倍數。
而後面你說的p和p+1的問題,那是16進制數,16進制的0x18變成十進制就是24.
3. c語言中,024和24是值相等的整型常量嗎
024是八進制數,等於十進制的20,以0開頭的數字是八進制數,後面由數字0~7組成,以0x開頭的是十六進制數,由數字0~9和字母A~F組成,字母可以是大字,也可以是小寫,正常的十進制數和我們平常使用的一樣,因此024與24是不相等的
4. c語言這個程序輸出結果為什麼是24
這是因為編譯時存在位元組對齊的原因,位元組對齊主要是為了提高內存數據讀取速度。如果你想要讓結果等於實際大小,你可以設置位元組對齊大小如
#pragma pack(1)
取消設置
#pragma pack()
位元組對齊的規則如下:
結構體的大小等於其最大成員的整數倍;
結構體成員的首地址相對於結構體首地址的偏移量是其類型大小的整數倍。
比如double型成員的首地址相對於結構體首地址的偏移量應該是8的倍數;
滿足前兩條規則後,編譯器會在結構體成員之後進行位元組填充。
5. C語言中,024和24是值相等的整型常量嗎
不相等哦。
以0 開頭的是 8進製表示的常數;
以0x開頭的是16進製表示的常數;
沒有前綴的是10進製表示的常數。
所以024和24是不同的
024 也就是 8進制的24,也就是2* 8+4=20
24 也就是10進制的24,也就是2*10+4=24
6. c語言程序設計 第一項輸入為何是24
你好,我沒搞懂你的意思,請詳細描述一下可以嗎?謝謝
你好,我看懂你的意思了,你把"^"的意思搞錯了,這個並不是次方符號,在c語言里這是一個位運算符,10的2次方的正確寫法是:pow(10,2)。謝謝,希望能幫到你。