今天随便搜了一下,搜到一道面试题。
虽然帖子没说出个所以然来,我认为大意是不使用循环并且只使用一个printf输出一个数组的所有元素。
之前因为某个题看到了关于&&,逗号表达式的一些小把戏。尝试写了下,成功了。
代码如下。
int m(int* input, int i, int size){
return printf( "%d \n",input[i] ) && ++i &&(i
}
int
main ( int argc, char *argv[] )
{
int input[] = {3,2,4,3,6};
int i = 0;
m(input, i, sizeof(input)/sizeof(int));
return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */
首先&&这个运算符有很好玩的特性,可以做一些小的trick.
对于&&的左边,如果返回true,那么继续执行右边。如果返回的是false,那么右边就不执行了。
这个题里倒是没有用到,所以可以直接用逗号表达式也是一样的。
逗号表达式则是依次运行每个被逗号分割的表达式,返回最后一个表达式的值。
对于这个函数m,
1.首先判定printf("%d\n",input[i]),这个恒定返回true,所以继续执行。
2.然后执行++i,就是下标后移
3.判定i是不是小于size,如果不是的话,说明数组已经输出完毕,所以给出表达式的值1.
4.如果i小于size,那么说明,没到头,继续输出,执行input(m,i,size)
阅读(3306) | 评论(1) | 转发(1) |