我正在通过数组在 c 中实现出队。 left 和 right 是指向出队的最左边和最右边元素的指针。 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() 中不起作用。 问题已结束,愚蠢的错误!!!
最佳答案
for(t=l;t!=r;t++);
看到那里的分号了吗?去掉它。照原样,循环递增 t
直到达到 r
而不执行任何操作,然后指向的值是 t
(现在 r
) 被打印,后面是“-->”,然后是 r
指向的值。
关于指针之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10013216/