嗨,我有一个关于双指针的问题。例如,在此代码中:
int a, b=2;
int *iPtr1, **iPtr2;
iPtr1 = &a;
iPtr2 = &iPtr1;
*iPtr1 = b+3;
*iPtr2 = iPtr1;
在最后一行*iPtr2 = iPtr1;
它只是告诉iPtr1
指向自己,因为只引用一次双指针就像使用iPtr1
一样?
答案 0 :(得分:2)
它使*iPtr2
指向iPtr1
指向的任何内容。由于iPtr2
指向iPtr1
,因此与iPtr1 = iPtr1
相同。
答案 1 :(得分:1)
使用gdb
跟踪执行情况,然后您会看到最后一行*iPtr2=iPtr1
没有改变任何内容。 (有点像iPtr1=iPtr1
)
在iPtr2 = &iPtr1;
上,iPtr2
已经指向iPtr1
指针所在的地址而不是iPtr1
指向的地址。
注意:您无法将iPtr2=&iPtr1
替换为*iPtr2=iPtr1
,因为此时iPtr2
具有垃圾值(如果它是本地非静态变量)并取消引用它是未定义的行为。