3

抱歉,如果这是一个愚蠢的问题,但我是新手,无法在任何地方找到答案。Fraction我已经声明了一个由五个对象(对象)组成的数组,如下所示:

Fraction *fractArray[5];

我现在想将此数组(或至少指向它的指针)传递给 C 风格的函数,该函数将对数组中的分数执行各种操作并返回单个分数。在声明了指向数组的指针(称为 * fractPointer)后,我尝试设置一个函数,例如:

Fraction* arraySum (Fraction *fractPointer, int arraySize)
{
    // dostuff , then return a fraction as the result
}

...并将预定义的指针和数组大小传递给它。我已经通过调试确定 fractPointer 成功指向第一个数组元素。指针最初也指向函数中的正确位置。但我似乎无法获得指向数组中下一个对象的指针。当我这样做时它不断抛出错误fractPointer++;(在函数中声明新的分数指针时也是如此)。抱怨是我正在对指向分数的指针进行算术运算,该指针的大小不是恒定的。我对这一切都错了吗?

4

2 回答 2

2

数组在传递给函数时会衰减为指针。所以你需要像这样声明你的函数:

Fraction *arraySum (Fraction **fractPointer, int arraySize);

或作为

Fraction *arraySum (Fraction *fractPointer[], int arraySize);

为了让它工作。

于 2012-11-17T15:00:53.613 回答
-1

注意你是如何声明你的数组的: Fraction *fractArray[5]。另一种写法是Fraction **fractArray. 一个指针数组。因此,要将数组传递给另一个函数,您需要使用相同的类型 -Fraction**Fraction *foo[].

这与“衰减”无关 - 这与您从示例中删除一个间接级别完全相同。ieint intArray[5]不能传递给带参数int的函数 - 函数需要获取整个int array[].

于 2012-11-17T17:09:25.893 回答