嗨,我有个关于双指针的问题。例如,在本代码中:

int a, b=2;
int *iPtr1, **iPtr2;

iPtr1  = &a;
iPtr2  = &iPtr1;
*iPtr1 = b+3;
*iPtr2 = iPtr1;

最后一行*iPtr2 = iPtr1;
它仅仅告诉iPtr1指向自身,因为取消对双指针的引用一次就像使用iPtr1

最佳答案

使用gdb跟踪执行,然后您将看到最后一行*iPtr2=iPtr1没有任何更改。(有点像iPtr1=iPtr1
iPtr2 = &iPtr1;上,iPtr2已经指向指针所在的地址,而不是指向的地址。
注意:不能将iPtr1替换为iPtr1,因为此时iPtr2=&iPtr1具有垃圾值(如果它是本地非静态变量),并且取消对它的引用是未定义的行为。

10-08 00:41