有趣的逗号运算符C语言——For初学者

本篇文章主要是聊一聊有趣的逗号运算符,学C语言的萌新们,应该能感觉到C语言有两个有趣的运算符,一个是赋值运算符(=),另一个就是逗号运算符(,) 。在许多其他高级程序语言中并没有这个运算符(比如Java中,它是分隔符) 。
什么是逗号运算符?
既然读者看到这篇文章 , 肯定是对逗号运算符有了一定的了解 。那么可以往下看怎么用逗号运算符 。百度百科,在C和指针里面提到逗号运算符可以控制求值顺序 , 比较有意思,逗号运算符的结合性也很有意思,这里只讨论逗号运算符的简单使用 。
怎么用逗号运算符?
逗号运算符最重要的是,最后一个是表达式的值 。
test1
上面这个就是一个逗号运算符使用的例子,可能会有疑问,这不就是普通的声明变量并赋值吗?不是的,其实是给每一个变量赋值,但是这个表达式的值是c的值 。这里例子不明显 。但对是对C语言的理解很有用 。
test2
#include#includeint main() {int a ,b ,c ;a = (b = 1,c = 3);printf("a=%d\tb=%d\tc=%d\n",a,b,c);return 0;}
那么这个例子呢?test1中 , 虽然我们经常用,但是恐怕大多数人都没有注意过吧 。test2中 , b和c很容易知道是b=1 , c=3,但是括号中的逗号运算符控制了求值顺序 。因为逗号运算符的值为最后一个变量的值 。运行结果为:
test3
#include#includeint main() {int a = 1,b = 2,c = 3,a1 ,a2;a1=(++b,c--,a+3);a2=++b,c--,a+3;printf("a1=%d\ta2=%d\n",a1,a2);return 0;}
在test2中 , 赋值还算是常规,这个例子是百度百科上的 , a1很常规跟test2一样 , 在a2的赋值语句中 , 信息量比较多,首先是前缀++的使用以及它的副作用 。再者,a2赋值后,c–和a+3并没有什么影响,只是c的值减少了 。运行结果:
test4
/*牛顿迭代 x = e^(-x),x0 = 0.5 */#include#include#includeint main(){float x = 0.5f;while(x = x - (x - exp(-x))/(1+x),fabs(x*exp(x)-1)>1e-5);printf("x = %.4f\ny = %f",x,x*exp(x)-1);return 0;}
【有趣的逗号运算符C语言——For初学者】

有趣的逗号运算符C语言——For初学者

文章插图
这是我觉得逗号运算符最有用的地方,在一个循环里使用,也可以在for循环里使用 。这样的话省了几行相同而又冗余的代码,当然,这种情况使可读性差了很多 。不建议经常使用,但是呢,这种紧凑的代码要会 。
test5
#include#includeint main() {int x, //自变量xy, //自变量yz, //自变量zu; //因变量ureturn 0;}
这个例子乍一看没什么特别的 , 但是定义在结构体中就很有用 。我们要注释每一个成员的信息 , 而每一行用一个int不仅繁琐,而且可读性差 。在这注释是个好习惯,在以后的编程项目中,是多个人一起完成,自己的代码最好有注释 。方便其他人改写 。也希望萌新们养成这个好习惯 。
test6
#include#includeint main() {for(int i = 1,sum = 0,n = 1;i < 10;i++)n *= i,sum+=n,printf("n = %d,sum = %d\n",n,sum);return 0;}
上面的例子是要打印10! , 并且每一个阶乘求和,有这么几个细节,首先在for循环的初始条件里,用到了两个逗号运算符,这个前面说的一样,就是初始化的时候,再然后就是for循环主体,没有用花括号而是使用了逗号运算符,这是个表达式 , 每一步都计算,最后取最后一个结果,也就是,(注:是有返回值的,这是真的??) 。
总结
逗号运算符就这几个用处吗?不是的 , 逗号运算符非常的灵活 , 可以用到很多的场合,我相信在上面的5个test中,除了第四个(毕竟很少有人这样用),大多数都见过 。这也是C语言比较有意思的地方,赋值运算符 , 表达式什么的,就像Linux一切皆文件,C语言一切皆运算 。本文只是给读者聊一聊都好运算符有意思的地方,希望有所收获 。有兴趣的读者可以看看赋值运算符 。
本人能力有限,难免有所错误,欢迎指正,欢迎留言交流你们的看法,以上都是个人的总结 。