值傳遞與地址傳遞
阿新 • • 發佈:2018-11-22
作為開發人員,入門級的理解,就是值傳遞和地址傳遞的區別,這是C語言中的基礎。今天通過一個oc的demo理解一下面向物件中的值傳遞和地址傳遞,首先定義一個自定義類MyFunction,定義值傳遞和地址傳遞的方法
-(int)byValue:(int)x
{
x++;
return x;
}
-(int)byAddress:(int *)x
{
(*x)++;
return *x;
}
在controller裡,生成這個類的例項,並寫測試程式碼:
TRMyFunction *m = [TRMyFunction alloc]; //值傳遞 int x = 10; int y = [m byValue:x]; self.outputLabel.text = [NSString stringWithFormat:@"x=%d,y=%d", x, y]; //地址傳遞 y = [m byAddress:&x]; self.outputLabel.text = [NSString stringWithFormat:@"x=%d,y=%d", x, y];
想想一下輸出結果是什麼。第一個輸出為10,11,第二個輸出為11,11
因為第二個是地址傳遞,給Y賦值的時候,我們其實是拿到了x的地址,這樣對x+1其實就是對x的記憶體地址中的x做了修改。也就是說修改了x本身。畫了兩張圖幫助大家理解
值傳遞:
地址傳遞: