【问题标题】:comparison between pointers指针之间的比较
【发布时间】:2012-04-18 06:50:09
【问题描述】:

我正在通过数组在 c 中实现出队。 left 和 right 是指向 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() 中不起作用。 问题结束,愚蠢的错误!!!

【问题讨论】:

  • @NiklasB.:给定左右指针,听起来他在做一个循环缓冲区。
  • @Jerry:是的,我想这是有道理的。
  • 我没有看到leftright,只有lr。如果您显示整个功能会有所帮助。
  • 预期输出和错误输出是什么? lr 的实际值是多少?
  • @ksb 如果leftright 对问题很重要,您应该在代码中显示它们。如果没有,请不要考虑它们。显示整个show() 函数。如果输出错误,请告诉我们它与预期结果有何不同或向我们展示一个示例。

标签: c pointers data-structures deque


【解决方案1】:
for(t=l;t!=r;t++);

看到那里的分号了吗?去掉它。照原样,循环递增t 直到达到r 而不执行任何操作,然后打印指向t(现在为r)的值,然后是“-->”,然后是指向的值发给r

【讨论】:

    【解决方案2】:

    已编辑**您在此处设置一个地址 for(t=l;t&lt;r;t++); 尝试在 for 循环中取消引用 t 以用作您想要的 int 变量(您对 i 做了什么)

    【讨论】:

    • 这就是目的,OP 不希望在最后一个元素之后出现“-->”。
    • 最初我认为双端队列由几个单独的内存块组成,因此它们可以按不同的顺序分配(我在这里讨论的是内存布局)。将删除我原来的答案,因为我们似乎正在处理一个并且只有一个块
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多