私は、呼び出し側が渡したポインタ値を表示する関数を書いています。 私は元の** arr1を台無しにしたくないので、** Pを割り当ててから、それを印刷して数えます。しかし、左辺arr1はゼロになります。ポインタにポインタを代入した後、lvalueがゼロになる理由
コード:
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?
}
である、
**p1
と同じ値に等しくなければならないが、私は修正しなかった** p1は私にはなかった? –@qwrqwr: '* p1'を修正したので、他の場所を指しています。だから '** p1'は別のオブジェクトになります。これを紙に描くことが最善のことです。 –
もし私が(* p)++なら、** p1の次の値へポインタを移動するだけですね。 **この変更中に** arr1のアドレスは変更されません。 だから、もし私が** arr1を印刷すると、まだarr1の最初の要素にある。 –