關於 final 的引數傳遞

2021-06-22 00:32:31 字數 977 閱讀 1423

【考題題幹】在下面程式標明的位置處插入哪條語句會導致編譯錯誤?

public  class  finaluse  ;

final  int  n  =  ;

use(x,  y,  z,  n);

}static  void  use(final  int  x,  int  y,  final  int  z,  int  n) 

}請考慮下面的選項:

a.x++

b.y++

c.y=x

d.z[0]++

e.n[0]++

f.z=n

【試題分析】宣告形參的時候可以在方法呼叫的引數呼叫之前加上關鍵字 final。 final 引數也可以叫

做空白最終變數,也可以當作常量。即在對其賦值之前(例如方法呼叫之前),該變數為空(為初始化),

賦值之後,在該變數的生存週期內只能呼叫再也

不能改變變數的值。

final 變數只可以被賦值一次。在方

法呼叫時,final 形式引數被賦予實際引數的值。在方法內部,不能對 final 引數進行重新賦值或者是修

改。在 use 方法中,x 是 final 型別的,因此 a 選項中 x++表示是可以改變 x 的值的,所以 a 會導致編

譯錯誤。y,n[0]是 int 變數,所以 y,  n[0]值是可以變化的,因此插入 b 和 e 選項都會編譯通過的。c 選

項是把 x 的值賦給 y,改變是 y 的內容,不會改變 x 的值,所以插入 c 選項會編譯通過的。在 d 選項中,

由於 z 是個 int 型陣列,它是屬於復合型別,在進行值傳遞的時候,傳給形參的是位址值,而不是內容,

因此 final   int  z 就表示 z 陣列不能在指向其他的陣列物件,但是 z 陣列中的內容是可以改變的,因此 z

[0]++表示的是內容上的改變,所以是沒有錯誤的,可以編譯通過的。f 選項正好與 d 選項相反,同理,

f 就是錯誤的。

【參***】af

關於引數的傳遞

解釋引數在方法中的傳遞過程,並通過記憶體解析圖的 方式,描繪出方法執行時記憶體的變化。可以使用今天課堂 來解釋 public class demo11 public static void main string args 此方法最後的輸出是 fun1 i 15 fun1 j 25 main i 1...

ESP,EBP 彙編關於引數的傳遞

參考了羅雲斌的一篇文章,很清晰 子程式如何訪問引數 因為預設對堆疊操作的暫存器有 esp 和 ebp,而 esp是堆疊指標,無法暫借使用,所以一般使用 ebp 來訪問堆疊,假定在乙個呼叫中有兩個引數,而且在 push 第乙個引數前的堆疊指標 esp 為 x,那麼壓入兩個引數後的 esp 為 x 8,...

關於指標傳遞引數的理解

學習c語言至今,已經到了乙個瓶頸,難度大多來自於指標和指標的引數傳遞。指標分為一維指標 多維指標 函式指標 指標陣列 陣列指標等等 其中主要我們要了解的是一維指標和指標陣列 陣列指標。include include void allocate memory for two array int plo...