首页 > 编程知识 正文

逗号运算符用法,c语言中逗号运算

时间:2023-05-04 21:00:57 阅读:251065 作者:4352

本篇文章主要是聊一聊有趣的逗号运算符,学C语言的萌新们,应该能感觉到C语言有两个有趣的运算符,一个是赋值运算符(=),另一个就是逗号运算符(,)。在许多其他高级程序语言中并没有这个运算符(比如Java中,它是分隔符)。
什么是逗号运算符?
既然读者看到这篇文章,肯定是对逗号运算符有了一定的了解。那么可以往下看怎么用逗号运算符。 百度百科,在C和指针里面提到逗号运算符可以控制求值顺序,比较有意思,逗号运算符的结合性也很有意思,这里只讨论逗号运算符的简单使用。
怎么用逗号运算符?
逗号运算符最重要的是,最后一个是表达式的值。
test1

上面这个就是一个逗号运算符使用的例子,可能会有疑问,这不就是普通的声明变量并赋值吗?不是的,其实是给每一个变量赋值,但是这个表达式的值是c的值。这里例子不明显。但对是对C语言的理解很有用。
test2

#include<stdio.h>#include<stdlib.h>int main() {int a ,b ,c ;a = (b = 1,c = 3);printf("a=%dtb=%dtc=%dn",a,b,c); return 0;}

那么这个例子呢?test1中,虽然我们经常用,但是恐怕大多数人都没有注意过吧。test2中,b和c很容易知道是b=1,c=3,但是括号中的逗号运算符控制了求值顺序。因为逗号运算符的值为最后一个变量的值。运行结果为:

test3

#include<stdio.h>#include<stdlib.h>int main() {int a = 1,b = 2,c = 3,a1 ,a2;a1=(++b,c--,a+3);a2=++b,c--,a+3;printf("a1=%dta2=%dn",a1,a2); return 0;}

在test2中,赋值还算是常规,这个例子是百度百科上的,a1很常规跟test2一样,在a2的赋值语句中,信息量比较多,首先是前缀++的使用以及它的副作用。再者,a2赋值后,c–和a+3并没有什么影响,只是c的值减少了。运行结果:

test4

/*孤独的大侠迭代 x = e^(-x),x0 = 0.5 */#include<stdio.h>#include<math.h>#include<stdlib.h>int main(){float x = 0.5f;while(x = x - (x - exp(-x))/(1+x),fabs(x*exp(x)-1)>1e-5);printf("x = %.4fny = %f",x,x*exp(x)-1);return 0;}

这是我觉得逗号运算符最有用的地方,在一个循环里使用,也可以在for循环里使用。这样的话省了几行相同而又冗余的代码,当然,这种情况使可读性差了很多。不建议经常使用,但是呢,这种紧凑的代码要会。
test5

#include<stdio.h>#include<stdlib.h>int main() {int x, //自变量xy, //自变量yz, //自变量zu; //因变量u return 0;}

这个例子乍一看没什么特别的,但是定义在结构体中就很有用。我们要注释每一个成员的信息,而每一行用一个int不仅繁琐,而且可读性差。在这注释是个好习惯,在以后的编程项目中,是多个人一起完成,自己的代码最好有注释。方便其他人改写。也希望萌新们养成这个好习惯。
test6

#include<stdio.h>#include<stdlib.h>int main() {for(int i = 1,sum = 0,n = 1;i < 10;i++)n *= i,sum+=n,printf("n = %d,sum = %dn",n,sum); return 0;}

上面的例子是要打印10!,并且每一个阶乘求和,有这么几个细节,首先在for循环的初始条件里,用到了两个逗号运算符,这个前面说的一样,就是初始化的时候,再然后就是for循环主体,没有用花括号而是使用了逗号运算符,这是个表达式,每一步都计算,最后取最后一个结果,也就是printf,(注:printf是有返回值的,这是真的??)。
总结
逗号运算符就这几个用处吗?不是的,逗号运算符非常的灵活,可以用到很多的场合,我相信在上面的5个test中,除了第四个(毕竟很少有人这样用),大多数都见过。这也是C语言比较有意思的地方,赋值运算符,表达式什么的,就像Linux一切皆文件,C语言一切皆运算。本文只是给读者聊一聊都好运算符有意思的地方,希望有所收获。有兴趣的读者可以看看赋值运算符。
本人能力有限,难免有所错误,欢迎指正,欢迎留言交流你们的看法,以上都是个人的总结。

见缝插针游戏的实现途径Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。