亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

sizeof(Buf)這個是指數組buf[]的大小還是指 指針buf所指向數組的第一個數的大???

sizeof(Buf)這個是指數組buf[]的大小還是指 指針buf所指向數組的第一個數的大?。?/h1>
慕婉清6462132 2022-10-01 14:10:57
#if OS_MAX_TASKS<9 //把當前任務加入到此消息隊//列的等待任務表中Buf[3]=OSMapTbl[OSRunnmgTasklD()]; (5)#elseif(OSRunningTasklD()<8){ (6)Buf[3]=OSMap Tbl[OSRunningTasklD()]; (7)else{Buf[4] |= OSMapTbl[OSRunningTasklD( ) &()x07]; (8)}#endifwhile(Buf[O]==0) //消息隊列中暫時投有消息 (9){#ifdef_C51_SP=SP+sizeof(Buf)。 (10)*((uint8 0S_Q_MEM_SEL * data*)(SP+l-slzeof(Buf))=Buf; (11)#endif{OSClearSignal(OSRunningTask()); //當前任務進入休眠//狀態 (12)OSSched(); //調度下一個最高優先級的就緒任務運行(13)#ifdef_C51_Buf= *((uint8 OS_Q_MEM SEL*dota*)(SP+1-sizeof(Buf)); (14)SP=SP-sizeof(Buf); (15)#endifif(OSWaitTick[OSRunningTasklD()]==O)(16){break; //任務再次運行,如果超時到,退出循環}} //while(Buf[0]==O)第(10)(11)(14)(15)語句不是很理解,堆棧指針sp是如何變化的?(uint8 0S_Q_MEM_SEL * data*)是什么意思?
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

第10句是在棧中分配臨時變量,第11句是在指針強轉,給分配的變量賦值,第14句從變量是讀取數據,第15句還原棧指針.
sizeof(Buf)的值,要看Buf是怎么定義的,如果是定義的一個指針,那sizeof(Buf)就等于4(32位機)或2(8位機),如果定義的是數組,就是數組大小.
其實,如果你寫過windows程序,就應該知道,VC的程序在進函數的時候一般都是下面的樣子:

push EBP
mov EBP, ESP
add ESP xxx
和你貼的程序是一個意思

查看完整回答
反對 回復 2022-10-06
  • 1 回答
  • 0 關注
  • 178 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號