我试图通过双指针移动数组。这是守则。
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]);
}
我希望更新var
函数中的pptr
。我可以使用双指针(**sptr,**pptr)
将指针(sptr,ptr)
(指向数组)引用到函数中。我可以更新第一个,但第二个没有变化。我认为问题在于陈述*sptr++
& *ptr++
。
请帮助我理解如何通过双指针浏览数组。 谢谢
答案 0 :(得分: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);
}
由于缺乏使用“变量++”运算符的经验,我真的不知道为什么编译器会这样做,我通常只使用“变量+ = 1”。