我正在讀一本書來學習Objective-C,並且這個程序假設顯示處理指針的關鍵概念,而且我真的迷失了方向。傳遞指向函數的困惑
是否有某種轉換在轉p1
,p2
,&il
,並&i2
的指針的值(*
)函數的參數發生的?像p1
變成*p1
?
我以爲變量的副本被傳入函數而不是實際的變量,那麼爲什麼傳入的變量的值在函數後發生了變化?
此外,爲什麼我會在第三行顯示警告:No previous prototype for function 'exchangeValues'
?
謝謝!
#import <Foundation/Foundation.h>
void exchangeValues (int *pint1, int *pint2) {
int temp;
temp = *pint1;
*pint1 = *pint2;
*pint2 = temp;
}
int main (int argc, char *argv[]) {
@autoreleasepool {
void exchangeValues (int *pint1, int *pint2);
int il = -5, i2 = 66, *p1 = &il, *p2 = &i2;
NSLog(@"il = %i, i2 = %i", il, i2);
exchangeValues(p1, p2);
NSLog(@"il = %i, i2 = %i", il, i2);
exchangeValues(&il, &i2);
NSLog(@"il = %i, i2 = %i", il, i2);
}
return 0;
}
輸出:
2012-08-02 11:13:38.569 Test[381:707] il = -5, i2 = 66
2012-08-02 11:13:38.571 Test[381:707] il = 66, i2 = -5
2012-08-02 11:13:38.572 Test[381:707] il = -5, i2 = 66
化妝'INT溫度;''進INT * temp'否則它可能會出現溫度是一個整數(在這種情況下,它被用作一個指向int) – 2012-08-02 15:37:56
@ RamchandraApte否,'int'在這裏是正確的,'temp = * pint1;'將'pint1'的值存儲到'temp'中。 – 2012-08-02 15:42:41
@DanielFischer正確,我不是很習慣C/C++(我是Pythonista) – 2012-08-04 12:58:00