Objective-C を学ぶために本を読んでいますが、このプログラムはポインターを扱う上で重要な概念を示していると思われますが、本当に迷っています。
p1
関数の引数で、p2
、&il
、およびをポインター&i2
の値 ( )に変換する何らかの変換が行われていますか? *
のようp1
に*p1
?
実際の変数ではなく、変数のコピーが関数に渡されたと思いましたが、渡された変数の値が関数の後で変更されたのはなぜですか?
また、3行目に次のような警告が表示されるのはなぜ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