在指定指针之后,为什么左值变为零

时间:2012-04-07 21:44:06

标签: c

我正在编写一个显示调用者传递的指针值的函数。 因为我不想弄乱原来的** 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?
    }

2 个答案:

答案 0 :(得分:2)

因为arr1p1指向相同的事物。因此,如果您修改*p1,那么您也会修改*arr1,因为它们是同一个对象。

答案 1 :(得分:2)

如您所述,**p1**arr1与指向的int值相同。

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

在此循环中,p1永远不会被修改,*p1*arr1相同,因此一旦循环退出,p1和{{ 1}}仍然指向相同的位置,arr1将等于0.因此**p1必须与**arr1的值相同,即{0}。