0

呼び出し元から渡されたポインター値を表示する関数を作成しています。元の **arr1 を台無しにしたくないので、それに **P を割り当ててから、印刷して数えます。しかし、その後 arr1 である左側がゼロになります。

コード:

  void merge(int **arr1, int **arr2, int **arr3)
    {
    int **p1= arr1;
    int **p2= arr2;
    int **p3= arr3;

    int count;

    printf("%d\n", **arr1);  //this shows the correct value of first element of arr1

    while(**p1)
    {
    printf("%d\n", **p1);
    (*p1)++;
    count++;
    }

    while(**p2)
    {
    printf("%d\n", **p2);
    (*p2)++;
    count++;
    }

    printf("%d\n", **arr1);  // this become zero, why??i didn't touch it in my code didn't i?
    }
4

2 に答える 2

2

arr1p1は同じものを指すからです。したがって、 を変更すると、同じオブジェクトであるため、*p1も変更されます。*arr1

于 2012-04-07T21:46:18.777 に答える
2

あなたが述べたように、指されているのと同じ値**p1です**arr1int

これで loop ができたwhile(**p1)ので、ループを終了してprintfステートメントに到達するには、 **p10 に等しくなければなりません。

このループ内では、p1は決して変更されません*p1。これは と同じ*arr1です。したがって、ループが終了するp1arr1、同じ位置を指し、 0 になります。**p1したがって、0である**arr1と同じ値に等しくなければなりません**p1

于 2012-04-07T21:54:25.263 に答える