C语言学习第16篇---三目运算符和逗号表达式

举报
CodeAllen 发表于 2021/10/29 23:28:49 2021/10/29
【摘要】 知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取   三目运算符(a ? b : c)可以作为逻辑运算的载体 规则:当a 的值为真时,返回b的值 , 否则返回c的值   实验1:三目运算符初探 #include <stdi...

知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取

 

三目运算符(a ? b : c)可以作为逻辑运算的载体

规则:当a 的值为真时,返回b的值 , 否则返回c的值

 

实验1:三目运算符初探


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a = 1;
  5. int b = 2;
  6. int c = 0;
  7. c = a < b ? a : b;
  8. (a < b ? a : b) = 3;
  9. printf("%d\n", a);
  10. printf("%d\n", b);
  11. printf("%d\n", c);
  12. return 0;
  13. }

 

三目运算符(a ? b : c)的返回值类型

  ~通过隐式类型转换规则返回b 和 c中的较高类型

  ~当b 和c 不能隐式转换到同意类型时将编译出错

 

实验2:三目运算符的返回类型


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c = 0;
  5. short s = 0;
  6. int i = 0;
  7. double d = 0;
  8. char* p = "str";
  9. printf( "%d\n", sizeof(c ? c : s) );
  10. printf( "%d\n", sizeof(i ? i : d) );
  11. printf( "%d\n", sizeof(d ? d : p) );
  12. return 0;
  13. }

 

 

逗号表达式:

实验3:逗号表达式实例


  
  1. #include <stdio.h>
  2. void hello()
  3. {
  4. printf("Hello!\n");
  5. }
  6. int main()
  7. {
  8. int a[3][3] = {
  9. (0, 1, 2),
  10. (3, 4, 5),
  11. (6, 7, 8)
  12. };
  13. int i = 0;
  14. int j = 0;
  15. while( i < 5 )
  16. printf("i = %d\n", i),
  17. hello(),
  18. i++;
  19. for(i=0; i<3; i++)
  20. {
  21. for(j=0; j<3; j++)
  22. {
  23. printf("a[%d][%d] = %d\n", i, j, a[i][j]);
  24. }
  25. }
  26. return 0;
  27. }

 

实例4:一行代码实现strlen函数


  
  1. #include <stdio.h>
  2. #include <assert.h>
  3. int strlen(const char* s)
  4. {
  5. return assert(s), (*s ? strlen(s + 1) + 1 : 0);
  6. }
  7. int main()
  8. {
  9. printf("len = %d\n", strlen("Delphi"));
  10. printf("len = %d\n", strlen(NULL));
  11. return 0;
  12. }

 

小结:

三目运算符返回变量的值,而不是变量本身

三目运算符通过隐式转化规则确认返回值类型

逗号表达式按照从左到右的顺序计算每个子表达式的值

逗号表达式的值为最后一个子表达式的值

 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/89060548

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。