如果 - 其他问题

时间:2010-08-21 10:09:13

标签: c queue if-statement

我正在学习队列,但我遇到了这段代码。这是一本书,所以我不能在这里发布整个代码,但我发布的内容就足够了。不仅仅是一个问题,我只是想确认一下我对这段代码的理解是否正确。

在函数delete_ap()中,'if'语句调用qretrieve()函数并将其返回值存储在指针'p'中。 我的问题是:如果返回的值不是NULL,那么'if'语句也被执行,不是吗? 所以一个值仍然存储在'p'中,我们可以打印这个值而不使用本例中使用的'else'语句。

谢谢!

/* Delete an appointment from the queue. */
void delete_ap(void)
{
  char *p;
  if((p=qretrieve()) ==NULL) return;
  printf("%s\n", p); <--Problem is in this line and the one above it.
}

/* Retrieve an appointment. */
char *qretrieve(void)
{
  if(rpos==spos) /* spos:holds the index of the next free storage location.
                    rpos:holds the index of the next item to retrieve.*/

   { 
    printf("No more appointments.\n");
    return NULL;
   }
  rpos++;
  return p[rpos-1];
}

2 个答案:

答案 0 :(得分:1)

使用return语句而不是将其余的函数放在else块中。

也就是说,如果printf,执行只会达到p != NULL

注意:许多人认为代码中间的返回会使代码难以阅读并且容易出现错误,因为通常在方法结束时会执行清理工作。

答案 1 :(得分:1)

这与:

相同
char *p = qretreive(); // <-- will always execute
if(p==NULL) 
  return; // <-- will not execute the next line if p is invalid
printf("%s\n", p);