示例:-save:方法NSManagedObjectContext声明如下:
- (BOOL)save:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
由于NSError已经是一个类,并且传递一个指针实际上会在实现中修改这个对象的效果,-save:这里将指针传递给指针有什么意义呢?什么是优势/感觉?
用法示例:
NSError *error;
if (![managedObjectContext save:&error]) {
// Handle the error.
}
Run Code Online (Sandbox Code Playgroud) 我现在对指针的指针很困惑,即使我已经读过为什么NSError需要双重间接?(指向指针的指针)和NSError*vs NSError**等等.
我做了一些思考,仍然有一些问题.
在这里我写了这个:
NSError *error = [NSError errorWithDomain:@"before" code:0 userInfo:nil];
NSLog(@"outside error address: %p", &error];
[self doSomethingWithObj:nil error:&error];
Run Code Online (Sandbox Code Playgroud)
为了测试上面的NSError方法,我写了这个:
- (id)doSomethingWithObj:(NSObject *)obj error:(NSError *__autoreleasing *)error
{
NSLog(@"inside error address: %p", error);
id object = obj;
if (object != nil)
{
return object;
}
else
{
NSError *tmp = [NSError errorWithDomain:@"after" code:0 userInfo:nil];
*error = tmp;
return nil;
}
}
Run Code Online (Sandbox Code Playgroud)
但我发现两个日志记录地址不同.这是为什么?
2016-08-19 19:00:16.582 Test[4548:339654] outside error address: 0x7fff5b3e6a58
2016-08-19 19:00:16.583 Test[4548:339654] inside error address: …Run Code Online (Sandbox Code Playgroud) struct counter{
long long counter;
}
struct instruction{
struct counter *counter
int repetitions;
void (*work_fn)(long long *);
};
int ncounter; //number of counters
struct counter *counter; //counter array
int nthreads; //number of threads
int *ninstructions; //number of instructions
struct instruction **instructions;
Run Code Online (Sandbox Code Playgroud)
这实际上是如何工作的?我遇到**指针问题