我通过数组在c中实现了一个dequeue。左和右是指向出列的最左边和最右边元素的指针。 show()函数接收左右指针。当我在void show(int * l,int * r)中尝试以下操作时,该函数会产生错误的输出 -
int *t;
for(t=l;t<r;t++);
{
printf("%d-->",*t);
}
printf("%d\n",*t);
但是当我尝试这个时它起作用 -
for(t=l,i=0;i<r-l;i++,t++)
printf("%d-->",(*t));
printf("%d\n",*r);
显然,第一个代码中的指针之间的比较不起作用,即使它们指向同一个数组的成员,为什么会这样呢?
编辑 - 这是整个功能
void show(int *l,int *r)
{
if(l==r && r==NULL)
{
printf("underflow\n");
}
else
{
int *t,i;
for(t=l;t!=r;t++);
{
printf("%d-->",*t);
}
printf("%d\n",*r);
/* for(t=l,i=0;i<r-l;i++,t++)
printf("%d-->",(*t));
printf("%d\n",*r);*/
}
}
注释掉的区域无法在show()中运行。 问题关闭,愚蠢的错误!!!
答案 0 :(得分:4)
for(t=l;t!=r;t++);
看到那里的分号?去掉它。按原样,循环递增t
直到达到r
而不做任何事情,然后打印指向t
(现在为r
)的值,然后“ - &gt;“,然后是r
指向的值。
答案 1 :(得分:0)
编辑**你设置一个点在这里解决一个问题for(t=l;t<r;t++);
尝试在for循环中取消t用作你想要的int varible(你用i做了什么)