gpt4 book ai didi

iphone - ivar 的地址作为参数

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:15 27 4
gpt4 key购买 nike

我正在尝试调用函数,但出现错误:

warning: passing argument 1 of 'drawPlot' from incompatible pointer type

//call
drawPlot(&listData);


//header
void drawPlot(NSMutableArray*);

listData当然是NSMutableArray

最佳答案

删除 &。您的变量已经是一个指针。我假设您已经这样声明了它:NSMutableArray *listData;

因此使用 & 将“指向指针的指针”传递给一个函数,该函数只需要一个指向 NSMutableArray 的指针。

现在,SDK 中有许多地方需要 NSError **。这是您使用 & 的时候,例如:

NSError *error = nil;...[SomeClass doSomethingReturningError:&error];if (error != nil) {    //something bad happened}

因此,这里的区别在于传递,在您的情况下,listData 按值传递对象。变量的值本身不能被修改(但数组的内容可以)。另一种情况 (&error) 是通过引用传递,这意味着可以修改变量的值,即指针本身。这就是为什么您可以将结果与 nil 进行比较,看看是否出了问题。

比较简单的例子是比较下面的区别:

void changeIntByValue(int i){    i++;}void changeIntByReference(int &i){    i++;}int x=2;changeIntByValue(x);NSLog(@"%d", x); // prints 2changeIntByReference(&x);NSLog(@"%d", x); // prints 3

按值传递不允许修改参数,而按引用传递则可以。

关于iphone - ivar 的地址作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com