2

私が取り組んでいる初心者プログラムでは、2つの引数の合計と差を取得するために、3つの関数を使用する必要があります。3番目の関数では、結果を2つのポインターに格納する必要があります。私の問題は、3番目の関数をmainにうまく統合できなかったことです。

私の主な機能は次のとおりです。

int main ()
{
    int num1, num2;
    int sumResult, differenceResult;

    printf("Please enter a number: ");
    scanf("%d", &num1);
    printf("Please enter another number: ");
    scanf("%d", &num2);

    sumResult = CalculateSum (num1, num2);

    printf("the result of the sum is %d\n", sumResult);

    differenceResult = CalculateDifference (num1, num2);

    printf("the result of the difference is %d\n", differenceResult);

    return 0;
}

ポインタを扱う私の関数:

void CalculateBoth(int num1, int num2, int*sumPtr, int *diffPtr)
{
    *sumPtr = num1+num2;

    *diffPtr= num1-num2;

}

助言がありますか?

4

5 に答える 5

1

ポインタは(通常)引数値ではなく、引数値が配置されているメモリ内のアドレスを渡すために使用されます。これにより、パラメータ値を変更できます。

例として、引数に 2 を追加し、結果変数を介して結果を渡す関数を見てみましょう。

void WrongAdd2(int argument, int result)
{
    result = argument + 2;
}

この場合、結果の値を渡しますが、結果の変更はローカルになります。代わりに、ポインターは値ではなく、値が配置されているアドレスについて通知します。

void Add2(int argument, int *result)
{
    *result = argument + 2;
}

ここで、 result 'address of int' なので*resultは result が指すメモリに配置されます

関数でポインターを使用するには、結果をメモリに配置する必要があります。

int value = 10;
int result = 0;

WrongAdd2(value, result); /* result is still 0. */
Add2(value, &result);     /* result is updated and now it is 12. */

したがって、同じ最初の 2 つの引数で CalculateBoth を呼び出す必要がありますが、結果は、出力パラメーターを配置する場所 (アドレスを含む) へのポインターである 3 番目と 4 番目の引数を介して渡されます。

CalculateBoth(num1, num2, &sumResult, &differenceResult);

つまり、 num1num2の値を取得し、 ADDRESS OF sumResultdifferenceResultを出力パラメーターとして渡します。

于 2013-03-22T17:42:14.000 に答える
1

CalculateSum()これは、関数とCalculateDifference()関数がこのコードの前に表示されることを前提としています。(ソースリストでそれらを提供しませんでした):

void CalculateBoth(int num1, int num2, int *sumPtr, int *diffPtr)
{
    *sumPtr = CalculateSum(num1, num2);
    *diffPtr= CalculateDifference(num1, num2);
}

int main ()
{
    int num1, num2;
    int sumResult, differenceResult;

    printf("Please enter a number: ");
    scanf("%d", &num1);
    printf("Please enter another number: ");
    scanf("%d", &num2);

    // invoke both sum an difference through a unified front-end
    CalculateBoth(num1, num2, &sumResult, &differenceResult);

    printf("the result of the sum is %d\n", sumResult);
    printf("the result of the difference is %d\n", differenceResult);

    return 0;
}
于 2013-03-22T18:07:06.750 に答える