3

これがばかげた質問である場合は申し訳ありませんが、私は初心者であり、どこにも答えが見つかりませんでした。Fraction次のように、5 つのオブジェクト (オブジェクト)の配列を宣言しました。

Fraction *fractArray[5];

この配列 (または少なくともそのポインター) を、配列内の分数に対してさまざまなことを行い、1 つの分数を返す C スタイルの関数に渡したいと思います。配列へのポインタを宣言した後( * と呼びますfractPointer)、次のような関数を設定しようとしました:

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

...そして、定義済みのポインターと配列サイズを渡します。fractPointer が最初の配列要素を正常に指していることをデバッグによって確立しました。ポインターは、関数の最初の正しい場所も指しています。しかし、配列内の次のオブジェクトにインクリメントするポインターを取得できないようです。私がそうすると、エラーが発生し続けますfractPointer++;(関数内で新しい Fraction ポインターを宣言するときも同じです)。不満は、定数サイズではない Fraction へのポインターで演算を行っていることです。私はこれについてすべて間違っていますか?

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[]

これは「腐敗」とは何の関係もありません。例から間接的なレベルを削除した場合とまったく同じです。つまりint intArray[5]、パラメータを使用して関数に渡すことはできません。int関数は全体を取る必要がありますint array[]

于 2012-11-17T17:09:25.893 に答える