Question: I'ver wondered, why is it that in front of an NSError, such as below, do we put: `&error` and not `error`?

E.g.

```
NSArray *result = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

```

Hope you can explain, also is this always the way or only in certain situations this is needed? Thanks.

Answer: 
You need to take the address of `error` because the function needs to modify it. `error` is passed *by pointer*, so you need the "take address" operator `&` for it.

C and Objective-C pass parameters *by value*. If you pass `error` without an ampersand and the method that you call modifies it, your function that made the call would not see any changes, because the method would operate on its *local copy* of `NSError*`.

You know that you need an ampersand in front of the corresponding parameter if you look at the signature of the method and see `**` there:

```
- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error
                                            //   ^ one                    ^^ two

```
The `error` parameter's type is `(NSError **)`, that is a pointer to a pointer to an NSError. The `error` variable that you use as the argument is probably declared as `NSError *`, so in order to get the types to match properly, you have to use the address of operator to get a pointer to a pointer (`&error`). The reason the method needs a pointer to a pointer in the first place is so that it can modify the value of `error` and have that new value be available to you, the caller of the method.