1. 程式人生 > >值傳遞與地址傳遞

值傳遞與地址傳遞

作為開發人員,入門級的理解,就是值傳遞和地址傳遞的區別,這是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本身。畫了兩張圖幫助大家理解

值傳遞:


地址傳遞: