我正在学习队列,但我遇到了这段代码。这是一本书,所以我不能在这里发布整个代码,但我发布的内容就足够了。不仅仅是一个问题,我只是想确认一下我对这段代码的理解是否正确。
在函数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];
}
答案 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);