道歉,如果这是一个愚蠢的问题,但我是新手,无法在任何地方找到答案。我已经声明了一个包含五个对象(Fraction
对象)的数组,如下所示:
Fraction *fractArray[5];
我现在想将这个数组(或者至少指向它的数组)传递给C风格的函数,该函数将对数组中的分数执行各种操作并返回单个分数。在声明一个指向数组的指针(称之为* fractPointer
)后,我试图建立一个类似的函数:
Fraction* arraySum (Fraction *fractPointer, int arraySize)
{
// dostuff , then return a fraction as the result
}
...并传递预定义的指针和数组大小。我通过调试建立了fractPointer成功指向第一个数组元素。指针最初也指向函数中的正确位置。但我似乎无法将指针增加到数组中的下一个对象。当我执行fractPointer++;
时,它会不断抛出错误(在函数中声明新的分数指针时也是如此)。抱怨的是我正在对指向Fraction的指针进行算术运算,而指数不是一个常数。我是不是错了?
答案 0 :(得分:2)
传递给函数时,数组会衰减为指针。所以你需要声明你的函数:
Fraction *arraySum (Fraction **fractPointer, int arraySize);
或
Fraction *arraySum (Fraction *fractPointer[], int arraySize);
为了让它发挥作用。
答案 1 :(得分:-1)
请注意您如何声明数组:Fraction *fractArray[5]
。另一种写作方式是Fraction **fractArray
。一组指针。因此,要将该数组传递给另一个函数,您需要使用相同的类型 - Fraction**
或Fraction *foo[]
。
这与“腐朽”无关 - 它与你从你的例子中删除一个间接级别完全一样。即int intArray[5]
无法传递给带参数int
的函数 - 函数需要占用整个int array[]
。