Objective C中的值傳遞和引用傳遞

2021-09-25 02:23:13 字數 1006 閱讀 2894

值傳遞::pass by value

引用傳遞:pass by reference

1、傳值

形參和實參佔不同記憶體單元,傳遞的實際上是實參變數或表示式的乙個拷貝副本。

形參的值發生變化也不會傳回給實參,是單向傳遞。

void increase(int x)
2、傳位址

傳遞的是實參變數位址的拷貝值,而不是實參變數的值,在被調函式中對位址所指物件的操作會改變實參的值。但是形參的內容即存放的實參變數位址並不會改變。

void increase(int * x) 

int main()

- (void)viewdidload 

- (void)changemystr:(nsstring *)str

執行結果:

2019-07-08  xxtest[8331:470859] 呼叫前 str=helloworld,物件位址=0x108bd1068,指標位址=0x7ffee702d928 

2019-07-08 xxtest[8331:470859] 方法執行前 str=helloworld,物件位址=0x108bd1068,指標位址=0x7ffee702d8f8

2019-07-08 xxtest[8331:470859] 方法執行後 str=nihao,物件位址=0x108bd10e8,指標位址=0x7ffee702d8f8

2019-07-08 xxtest[8331:470859] 呼叫後 str=helloworld,物件位址=0x108bd1068,指標位址=0x7ffee702d928

str =新的字串,讓這個指標指向了新的地方。並沒有改變函式外面原來指標指向的內容。

這點特別重要,指標傳過來那個str指標本質是值傳遞,相當於copy了乙份指標,指向了原來的物件。

所以在changemystr函式裡面的str指標並不是外面的str指標。

C 中的引用傳遞 值傳遞

先來說下c 中的資料型別.分值型別和引用型別兩大類.值型別 直接儲存資料的值,儲存在記憶體中 引用型別 儲存對值的引用,實際上儲存的就是乙個記憶體的位址 c 預定義的簡單型別,像int,float,bool,char都是值型別,另外enum 列舉 struct 結構 也是值型別 string,陣列,...

java中的值傳遞與引用傳遞

1.說明 原始型別 int,long等 和包裝類 integer,long等 進行引數傳遞時是值傳遞,所有函式體內針對引數的操作,都是對於拷貝的操作,不會改變本體。類和容器 list,set等 作為引數時傳的是引用的乙個副本 注意 不是引用本身。區別於c 2.例項 1 以下為原始型別和包裝類作為引數...

java中的值傳遞和引用傳遞

值得傳遞 實際引數得值傳遞給形式引數,但是形式引數改變不了實際引數的值。如下 1 public class alias public static void main stringargs 2 public class passvalue public static void main string...