我碰巧在 SO 上偶然发现了关于双星 ( **
) 与NSError
. 决定更深入地挖掘它,这导致我重新访问C
.
我已经在这里阅读了很多帖子(这里不重复)NSError
,我理解他们为什么这样做。
因此,我决定在 IDE (Xcode) 中编写一个小片段来亲自查看它的实际效果。
int a = 10;
int b = 20;
int *c = &a;
int *d = &b;
int **e = &d;
NSLog(@"Before: a is: %d b is: %d", a, b);
[self testSingleStar:c];
[self testDoubleStar:e];
NSLog(@"After: a is: %d b is: %d", a, b);
方法:
- (void)testDoubleStar:(int**)x
{
int anotherValue1 = 22;
**x = anotherValue1;
}
- (void)testSingleStar:(int*)x
{
int anotherValue2 = 33;
*x = anotherValue2;
}
输出:
之前:a 是:10 b 是:20
之后:a 是:33 b 是:22
a
(通过单指针)和b
(通过双指针)的值都发生了变化。
那么,如果我们可以只使用单个指针a
来更改 (of )的值,为什么我们需要使用指向指针的指针,以便我们可以在方法调用中修改对象在其参数 ( ) 中传递的对象?NSError
NSError
NSError
&error
此外:
关于上述内容,将某些内容传递给参数 inC
实际上是将副本传递给参数(即使在单个指针的情况下,也只会传递它的副本),因此在方法范围内所做的任何更改都会不影响传递给它的原始值(这就是他们使用双星的原因)。
但是上面只使用了一个指针的示例似乎与此相矛盾,因为值(即a
由单个指针指向 - c
)确实发生了变化?