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并且与所指向的值**arr1相同。int

现在你有了循环while(**p1),所以为了退出循环并进入printf语句,**p1必须等于 0。

在这个循环内部,p1永远不会被修改,*p1is,与 相同*arr1,因此一旦循环退出,p1仍然arr1指向相同的位置,并且**p1将等于 0。因此**arr1必须等于与 相同的值**p1,即 0。

于 2012-04-07T21:54:25.263 回答