我问的是关于c#,但我认为它在大多数其他语言中都是一样的.
有没有人对表达式和语句有一个很好的定义,有什么区别?
我对整个序列点的理解是基本的.我所拥有的只是一些粗略直观的想法,"一旦遇到序列点,我们就可以确定先前评估的所有副作用都已完成".我还读到,在语句中printf("%d",a++,++a,a++),行为未定义,因为逗号不表示序列点,而分号则表示.因此,我觉得一个非常严谨和确凿的答案对我有很大帮助,而不是通过直觉猜测和思考.
C语言中的以下类型的语句也是安全可靠的:
int a=4,*ptr=&a; //Statement 1
x+=4,y=x*2; //Statement 2 (Assume x and y are integer variables)
Run Code Online (Sandbox Code Playgroud)
如果有,怎么样?特别是在第二种情况下,如果逗号不是一个序列点,那么在我们在赋值中使用它之前,我们怎么能确定它x是否增加了?对于第一个语句,在分配地址之前,如何确定已初始化并分配内存?我是否应该安全地使用以下内容:4y=x*2aptr
int a=4,*ptr;
ptr=&a;
Run Code Online (Sandbox Code Playgroud)
和
x+=4;
y=x*2;
Run Code Online (Sandbox Code Playgroud)
编辑我对逗号运算符的理解告诉我这些语句是安全的.但是在阅读了关于序列点以及类似事物printf("%d",a++,++a,a++)未定义之后,我有了第二个想法.