【发布时间】:2012-08-02 15:31:57
【问题描述】:
我正在读一本书来学习 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
【问题讨论】:
-
将
int temp;变成int *temp否则它可能看起来 temp 是一个整数(在这种情况下它被用作指向 int 的指针) -
@RamchandraApte 不,
int在这里是正确的,temp = *pint1;将值pint1存储在temp中。 -
@DanielFischer 正确,我不太习惯 C/C++(我是 Pythonista)
标签: objective-c function pointers