我试图调用函数但是我收到错误:
警告:从不兼容的指针类型
传递'drawPlot'的参数1
//call
drawPlot(&listData);
//header
void drawPlot(NSMutableArray*);
listData当然是NSMutableArray
答案 0 :(得分:2)
删除&amp ;.你的变量已经是一个指针。我假设你已经宣布它是这样的:NSMutableArray *listData;
。
所以使用&将一个“指向指针的指针”传递给一个期望只是一个指向NSMutableArray的指针的函数。
现在,SDK中有许多地方需要NSError **
。这就是你要使用&amp ;,例如:
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 2 changeIntByReference(&x); NSLog(@"%d", x); // prints 3
按值传递不允许修改参数,而通过引用传递。
答案 1 :(得分:-1)
listData的定义应该类似于:
NSMutableAarray listData; //OR
NSMutableAarray listData[];
如果是前者,则将drawPlot调用更改为
drawPlot(&listData[0]) // OR
drawPlot(listData)
如果是后者,则将drawPlot调用更改为
drawPlot(&listData [ the index of the listData array member you want to plot]); // does it work now?