单指针可以在 Objective-C 中完成工作时为什么要使用双指针?
why use double pointer when single pointer can do the work in Objective-C?
我明白使用指针的好处,但我真的不明白双指针。有人告诉我,当您希望该方法修改您传入的参数的值时,会使用双指针。在下面的示例中,5
将打印在日志中。那为什么我们要在void changeInt(int **i)
中使用双指针呢?
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int *a = 1;
changeInt(&a);
NSLog(@"%i", a);
[pool drain];
return 0;
}
void changeInt(int *i)
{
*i = 5;
}
不需要带有标量 (int) 的双指针。显然你只需要一个指针。
但是对象已经是一个指针。所以要对一个对象做同样的事情,你需要一个双指针。典型的用例是 NSError**
:
+ (id)stringWithContentsOfFile:(NSString *)path
encoding:(NSStringEncoding)enc
error:(NSError **)error
我明白使用指针的好处,但我真的不明白双指针。有人告诉我,当您希望该方法修改您传入的参数的值时,会使用双指针。在下面的示例中,5
将打印在日志中。那为什么我们要在void changeInt(int **i)
中使用双指针呢?
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int *a = 1;
changeInt(&a);
NSLog(@"%i", a);
[pool drain];
return 0;
}
void changeInt(int *i)
{
*i = 5;
}
不需要带有标量 (int) 的双指针。显然你只需要一个指针。
但是对象已经是一个指针。所以要对一个对象做同样的事情,你需要一个双指针。典型的用例是 NSError**
:
+ (id)stringWithContentsOfFile:(NSString *)path
encoding:(NSStringEncoding)enc
error:(NSError **)error