首页 >> 大全

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

2024-01-11 大全 34 作者:考证青年

本篇文章主要是聊一聊有趣的逗号运算符,学C语言的萌新们,应该能感觉到C语言有两个有趣的运算符,一个是赋值运算符(=),另一个就是逗号运算符(,)。在许多其他高级程序语言中并没有这个运算符(比如Java中,它是分隔符)。

什么是逗号运算符?

既然读者看到这篇文章,肯定是对逗号运算符有了一定的了解。那么可以往下看怎么用逗号运算符。 百度百科,在C和指针里面提到逗号运算符可以控制求值顺序,比较有意思,逗号运算符的结合性也很有意思,这里只讨论逗号运算符的简单使用。

怎么用逗号运算符?

逗号运算符最重要的是,最后一个是表达式的值。

test1

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

test2

#include
#include
int 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
#include
int 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
#include
int 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;
}

神奇的运算符号_有趣的运算符号_

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

test5

#include
#include
int main() {int x, //自变量xy, //自变量yz, //自变量zu; //因变量ureturn 0;
}

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

test6

#include
#include
int 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语言一切皆运算。本文只是给读者聊一聊都好运算符有意思的地方,希望有所收获。有兴趣的读者可以看看赋值运算符。

本人能力有限,难免有所错误,欢迎指正,欢迎留言交流你们的看法,以上都是个人的总结。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了