1

我试图通过双指针移动数组。这是代码。

void pptr (int **sptr2,int **ptr2)
{
    **ptr2 = (**sptr2 + 7);       //Works Fine
    *sptr2++; *ptr2++;            //Probable problem Statement
    **ptr2 = (**sptr2 + 7);       //Not Workign
}
void ppointer (int *sptr,int *ptr)
{
    pptr (&sptr,&ptr);
}
main()
{
   int sour[2];
   sour[0] = 40;
   sour[1] = 50;
   int var[2];
   var[0] = 10;
   var[1] = 20;
   printf("befor change %d %d\n",var[0],var[1]);

   ppointer(&sour[0],&var[0]);
   printf("pointer to pointer change %d %d\n",var[0],var[1]);
}

我希望更新功能varpptr我可以使用双指针(**sptr,**pptr)将指针(sptr,ptr)(指向数组)引用到函数中。我可以更新第一个,但第二个没有变化。我认为问题在于声明*sptr++& *ptr++

请帮助我了解如何通过双指针浏览数组。谢谢

4

1 回答 1

0

我认为这是编译器对“* sptr++;”的愚蠢。和“*ptr++;”

void pptr (int **sptr2, int **ptr2)
{
    **ptr2 = (**sptr2 + 7);       

    ///////////////////////////////////////////////////////
    *sptr2++;    //This is the problem these two statements
    *ptr2++;
    ///////////////////////////////////////////////////////

    **ptr2 = (**sptr2 + 7);
}

但是现在如果你把它改成 "*sptr2 += 1;" 和“*ptr += 1;” 然后它可以工作

void pptr (int **sptr2, int **ptr2)
{
    **ptr2 = (**sptr2 + 7);       

    ///////////////////////////////////////////////////////
    *sptr2 += 1;    //Now no problem
    *ptr2 += 1;
    ///////////////////////////////////////////////////////

    **ptr2 = (**sptr2 + 7);
}

由于缺乏使用“variable++”运算符的经验,我真的不知道为什么编译器会这样做,我通常只是使用“variable += 1”来代替。

于 2013-12-04T05:53:30.147 回答