你为什么要回来(0 * ap ++)?

时间:2015-01-01 19:47:36

标签: c

这是K& R-C,这里是整个代码:http://v6shell.org/history/if.c

看看这个功能:

char *nxtarg() {
    if (ap>ac) return(0*ap++);
    return(av[ap++]);
}

1.Question: 为什么返回(0 * ap ++)?好的,你想要返回0并将ap增加1.但为什么会这样?它比if (ap>ac) {ap++; return 0;}快吗?

2.Question: nxtarg的返回类型必须是 char * ,为什么你能返回0,一个整数?

2 个答案:

答案 0 :(得分:7)

这是将增量压缩到返回零的语句的一个小技巧。它在逻辑上等同于条件

if (ap > ac) {
    ap++;
    return 0;
}
使用comma operator

甚至更好

return (ap++, (char *)0); // Thanks, Jonathan Leffler

请注意,由于示例中的零不是编译时常量,因此表达式需要强制转换才能符合标准:

if (ap>ac) return (char*)(0*ap++);

就返回整数零而言,在指针上下文中使用时,它被认为等于NULL指针。

答案 1 :(得分:2)

++运算符将递增该值,并在值递增之前返回该值。如果该函数应该返回指针,则可以返回零或NULL,以指示NULL指针。