Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65336
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: C/C++

2015-08-06 16:48:37

今天随便搜了一下,搜到一道面试题。
虽然帖子没说出个所以然来,我认为大意是不使用循环并且只使用一个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)
阅读(683) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~