我正在编写一个显示调用者传递的指针值的函数。 因为我不想弄乱原来的** 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?
}
答案 0 :(得分:2)
因为arr1
和p1
指向相同的事物。因此,如果您修改*p1
,那么您也会修改*arr1
,因为它们是同一个对象。
答案 1 :(得分:2)
如您所述,**p1
和**arr1
与指向的int
值相同。
现在你有了循环while(**p1)
,所以为了退出循环并进入printf
语句,**p1
必须等于0.
在此循环中,p1
永远不会被修改,*p1
与*arr1
相同,因此一旦循环退出,p1
和{{ 1}}仍然指向相同的位置,arr1
将等于0.因此**p1
必须与**arr1
的值相同,即{0}。