只取消一次双指针?

时间:2013-02-28 15:27:38

标签: c pointers indirection

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

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

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

在最后一行*iPtr2 = iPtr1; 它只是告诉iPtr1指向自己,因为只引用一次双指针就像使用iPtr1一样?

2 个答案:

答案 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具有垃圾值(如果它是本地非静态变量)并取消引用它是未定义的行为