什麼是引數

呼叫函式或程序時傳遞的值。宣告端接收值的變數稱為形式參數,呼叫端傳遞的值稱為實際引數。有複製值後傳遞的傳值,以及讓被呼叫端參照變數或陣列本身的傳參照。

日文名稱: 引数

「引數」出現在10領域的24道練習題中(程式設計基礎(虛擬碼追蹤), 編譯器, 指令集與組合語言等)。

這個名詞所屬的領域: 程式設計基礎(虛擬碼追蹤)

練習引數的題目

在RISC-V的標準呼叫慣例中,下列何者是用於傳遞整數引數與回傳值的暫存器?

  1. A引數是s0~s7,回傳值是ra
  2. B引數是a0~a7,回傳值是a0(及a1)
  3. C引數全部放在堆疊,回傳值是sp
查看答案與解析

正確答案:B. 引數是a0~a7,回傳值是a0(及a1)

在RISC-V的標準呼叫慣例中,整數引數最多8個放入a0~a7(x10~x17)來傳遞,回傳值放在a0,RV32上64位元的值等則放入a0與a1兩個暫存器回傳。因為是以比記憶體更快的暫存器傳遞,所以函式呼叫的負擔較小。超過8個的引數放在堆疊上。浮點數的引數使用fa0~fa7。

在RISC-V的標準呼叫慣例中,呼叫一個有10個整數引數的函式時,第9個與第10個引數是在哪裡傳遞?

  1. As0與s1
  2. Bt0與t1
  3. C堆疊上
查看答案與解析

正確答案:C. 堆疊上

引數用的暫存器只有a0~a7共8個,所以第9個以後由呼叫端堆入堆疊,被呼叫端則從堆疊指標起算的固定位置讀取。由於記憶體的存取增加,引數非常多的函式會稍微變慢。常見的做法是設法減少引數,例如將大型結構體整個以指向結構體的指標來傳遞。

解析中的「引數」

出現「引數」的題目(24題)

  1. 在RISC-V的標準呼叫慣例中,下列何者是用於傳遞整數引數與回傳值的暫存器?
  2. 在RISC-V的標準呼叫慣例中,呼叫一個有10個整數引數的函式時,第9個與第10個引數是在哪裡傳遞?
  3. 如上所示,加上引數執行腳本 s.sh 時,輸出是下列何者?
  4. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 f(9087) 呼叫下列函式 f 時,回傳值為下列何者?
  5. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 toBin(12) 呼叫下列函式 toBin 時,回傳值為下列何者?
  6. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 pow(2, 10) 呼叫下列函式 pow 時,pow 被呼叫的次數(含第一次呼叫)為下列何者?
  7. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。下列程式在以遞增順序排好的整數型陣列 data(元素編號從1開始)中,把第一個大於或等於 x 的值的元素編號求到 lo。x 不大於 data 的最後一個元素。程式中的【a】應填入下列何者?
  8. 下列何者是制定呼叫慣例(calling convention)的主要目的?
  9. 下列何者最適合作為編譯器的語意分析所能發現的錯誤範例?
  10. 關於函式行內展開(inline expansion)的優點與缺點,下列組合何者正確?
  11. 對上方函式最後的遞迴呼叫進行尾端呼叫最佳化,會有什麼效果?
  12. 在具靜態型別的語言中,編譯器進行型別檢查的主要優點為何?
  13. 啟動程式時(Linux的execve等),作業系統的載入器所進行的事項,下列何者正確?
  14. 關於C語言程式中作業系統最初開始執行的位址(進入點,entry point),下列何者正確?
  15. 上方RISC-V程式碼最後的ecall指令被執行時,會發生下列何事?

相關名詞

回傳值 變數 堆疊 陣列 呼叫慣例 遞迴 取餘運算 系統呼叫 指標(pointer) 堆疊指標

前往名詞解釋列表