請教c語言程式為什麼會是24而不是

2023-01-11 20:21:22 字數 2510 閱讀 1787

1樓:九劍之上

這個問題涉及到結構體位元組對齊的問題,在vc中地址按4位元組對齊,即32位。上面的程式long型的變數佔4個位元組,char* 指標型別為4個位元組,short int 和char共3個位元組補齊為4個位元組,一共12個位元組,後面的陣列10個位元組補齊為12個位元組,12+12=24。如有疑問請參考http:

//blog.csdn.net/arethe/article/details/2548867

2樓:匿名使用者

結構體的對齊問題:

對於char型資料,其自身對齊值為1,對於short型為2,對於int,float,double型別,其自身對齊值為4,單位位元組。也就是說如果 地址能對這個型別的對齊值整除,才能把資料放這裡。

首地址是dd10,那麼依次放8個位元組(long),地址就是dd17。char *s對齊值為1,所以放在了dd18的位置。接著放short int i ,對齊值是2,因為接下來得地址是dd19不能被2整除,所以空出dd19,放在了dd20和dd21這兩個地址上。

char c的對齊值是1,放在了dd22上。short int 的對齊值是2,空出了dd23,放在dd24及以後的10位元組,所以是24

0x18就是24啊,你是以十六進位制輸出的

為什麼 bfff-a000+1=1fff+1=2000h 而不是 bfff-a000+1=2fffh, 那個f不是=15嗎? f-015應該=15才是啊!!

3樓:匿名使用者

16進位制的數其實和十進位制是一樣的,區別在於一個以10的n次方作為計數單位,一個以16的n次方作為計數單位

bfff-a000 = 1fff這個很好理解吧 b-a = 1,f-0=f 每一位的減法都不需要向前一位借位

1fff+1 = 1fff+0001 f+1=15+1 = 16所以要進位,進位3次結果就是2000啊

c語言題 編寫程式要求使用者輸入12小時制的時間,然後用24小時制顯示該時間

4樓:風若遠去何人留

因為這裡有一個特殊點

12:00 pm

這個是中午12點 而不是晚上12點。

所以24小時制 這個要轉換成12:00

第一個程式做不到這一點。

5樓:聽不清啊

下圖肯定不可以,因為變數am_pm沒有定義,定義的是ap

二個程式中使用有,上面是p,下面是p。如果程式中不相符的話,它會不認的。

6樓:匿名使用者

就是邏輯判斷不周全~~~

7樓:匿名使用者

如果是在12點以前,你的hour24就是隨機數

c語言問題,下面這個程式執行得到24,可是我覺得不應該是13+13=26麼,**不對呢

8樓:快樂的快樂人

func(func,func),func中呼叫了兩次第一次返回值是13沒錯,

然後第二次呼叫得11,因為第一次x++,y++實在這個「語句」結束後進行自增,及求出z後再運算,即第二個func呼叫前x仍是6,y仍是7。而後面的自減運算是在呼叫前,為5,6。

你可以試試,m=func(x++,y++);(注意是分號隔開)n=func(--x,--y);

然後執行z=func(m,n),應該就是26了。

9樓:娉枸

你設定斷點看看x++,y++,--x,--y是什麼結果,應該是這裡的問題,有時候你腦子裡裡想的過程跟程式實際執行是不一樣的。

一個c語言問題,為什麼不報錯,但程式執行到一半

10樓:桃花運退還給

遇到已停止工作一般是指標問題 問題可能出在野指標 空指標呼叫 越界多種 不好下結論,但是問題出在 指標 或者連結串列中指標位置

關於sdl和c語言,都說sdl是用c編寫的,在c程式中可以呼叫sdl庫,就這點搞不明白,這意思是c

11樓:無上陽光

sdl我不瞭解,但是聽說過是一個多**庫。其實是這樣,sdl是c寫的,但是不能說是混用,我的理解就是一個用c寫的庫而已,就好像我們最常用的c++的stl庫一樣。這就類似於sdl是一個用c開發的元件,可以供你呼叫一樣

c語言,1000以內的完數,為什麼會有24!!!! 10

12樓:

#include

int main()

{int x = 2, y, z, s;

printf("完數有下列數字:\n");

for (x; x <= 1000; x++){s = 0;

for (y = 1; y

13樓:

24不是完數

可能是你程式寫的有錯誤

for (int x = 2; x <= 10000; x++)if (i == x - 1)}}}

C語言下面程式執行結果為什麼是0而不是1 mainint n

因為迴圈的時候當i等於k的時候退出迴圈了,根本沒有執行迴圈體n i n i 1 這一句,所以n k 的值為初始化的值,初始化的值為0.故輸出0,因為當i k時,for迴圈的條件已經不滿足,不會執行n i n i 1。故n k 還是0.選cn 4 相當於是這樣 intn 0 while n 2 先進行...

C語言,我的程式為什麼執行不對,c語言中輸入一個程式後顯示無錯誤,為什麼不能執行

是陣列,本身就是地址,不必用 2 b進位制,每位上的數字最大值是b 1,因此,應該先檢視3個數各位的數字,取最大值 1作為b的最小值.3 注意,base在每次求1個數之前,要重新歸1。你求sum1,sum2,sum3前,都沒有歸1,base累積,越來越大。第一個base 1 應該在for i len...

請教個C語言程式大家幫下,謝謝了

先把數字轉換成字串,再來比較 在stdlib.h中有個函式itoa itoa的用法 itoa i,num,10 i 需要轉換成字元的數字 num 轉換後儲存字元的變數 10 轉換數字的基數 進位制 10就是說按照10進位制轉換數字。還可以是2,8,16進位制型別 原形 char itoa int v...