逗号表达式与赋值表达式

简介: 逗号表达式与赋值表达式

       逗号表达式和赋值表达式是C语言中常用的表达式类型。它们可以用于各种目的,包括计算和评估表达式、初始化变量、为函数调用提供参数以及将值分配给变量。

逗号表达式

       逗号表达式允许在单个语句中计算和评估多个表达式。逗号分隔每个表达式,并且表达式从左到右依次执行。逗号表达式可以用于以下目的:

  1. 将多个表达式组合为一个语句。
  2. 初始化多个变量。
  3. 为函数调用提供多个参数。
  4. 将值分配给多个变量。

逗号表达式运算法则

  • 逗号表达式从左到右依次执行。
  • 逗号表达式中,每个表达式都独立计算和评估
  • 逗号表达式中,每个表达式的值都会被丢弃除了最右边的表达式
  • 逗号表达式的值是其最右边的表达式的值

以下是一些逗号表达式运算法则的示例:

int i = 1, j = 2, k = 3; // 初始化三个变量

printf("%d, %d, %d\n", i, j, k); // 输出三个变量的值


 逗号表达式中,每个表达式都独立计算和评估:

int a = (1 + 2), b = (3 + 4), c = (5 + 6); // 计算三个表达式的值   a=3,b=7,c=11


 逗号表达式中,每个表达式的值都会被丢弃,除了最右边的表达式:

int d = (1, 2, 3); // 逗号表达式中,只有最右边的表达式 3 的值会被保留,d最终等于3


逗号表达式的值是其最右边的表达式的值:

int e = (1, 2 + 3, 4 * 5); // e 的值是 20

练习:

求下面代码的结果 :

#include <stdio.h>
int main()
{
    int arr[] = {1,2,(3,4),5};
    printf("%d\n", sizeof(arr));
    return 0;
} 

答案:16

分析:(3,4)逗号表达式,从左往右计算,表达式最终结果是4。sizeof计算数组大小(sizeof:https://blog.csdn.net/wait___wait/article/details/135184125?spm=1001.2014.3001.5502,单位字节,int类型字节为4,数组有4个元素,因此大小为4*4=16。

赋值表达式

       赋值表达式用于将值分配给变量。赋值运算符“=”用于将右边的值分配给左边的变量(操作符:赋值运算符https://blog.csdn.net/wait___wait/article/details/135242898)。赋值表达式可以用于以下目的:

  • 将常量或变量的值分配给变量。
  • 将函数调用的返回值分配给变量。
  • 将表达式计算的结果分配给变量。

以下是一些赋值表达式的示例:

int i = 1; // 将值 1 赋值给变量 i

i += 2; // 将值 2 加到变量 i 上,  i等于3,i+=2相当于i=i+2,是复合赋值

易混淆点        

举例说明:

#include <stdio.h>
int main()
{
    int a, b, c;
    a = 5;
    c = ++a;
    b = ++c, c++, ++a, a++;
 
    b += a++ + c;
    printf("a = %d b = %d c = %d\n:", a, b, c);
    return 0;
} 

答案:a = 9 b= 23 c = 8

答案解析:

++运算符:分为前置++和后置++https://blog.csdn.net/wait___wait/article/details/135242898

前置++:先加1,后使用,即先使用变量中内容,然后给结果加1

后置++:先使用变量中内容,整个表达式结束时,给变量加1

c = ++a;// ++a:a+1,结果为6,加完之后的结果用来赋值给c,因此:a = 6 c = 6

b = ++c, c++, ++a, a++;

  // 逗号表达式的优先级最低,要想先执行可利用(),这里先算b=++c, b得到的是++c后的结果,b是7

  // b=++c 和后边的构成逗号表达式,相当于   (b=++c),c++, ++a, a++    依次从左向右计算的。

  // 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7

b += a++ + c; // a先和c加,结果为16,在加上b的值7,b的结果为23,最后给a加1,a的值为9

练习:

#include<stdio.h>
int main()
{
    int a, b;
    b = (a = 1,a + 1, ++a);
    printf("a = %d b = %d", a, b);
    return 0;
} 

先自己分析一下

答案:a = 2 b = 2

解析: b = (a = 1,a + 1, ++a)先执行逗号表达式再执行赋值表达式,逗号表达式的最终结果是a等于2,后a的值赋给b。


期待


目录
相关文章
|
4月前
|
Java 测试技术
day9:运算符、表达式和语句
【7月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
36 6
|
5月前
|
C++
C++一分钟之-理解C++的运算符与表达式
【6月更文挑战第18C++的运算符和表达式构成了编程的基础,涉及数学计算、逻辑判断、对象操作和内存管理。算术、关系、逻辑、位、赋值运算符各有用途,如`+`、`-`做加减,`==`、`!=`做比较。理解运算符优先级和结合律至关重要。常见错误包括优先级混淆、整数除法截断、逻辑运算符误用和位运算误解。解决策略包括明确优先级、确保浮点数除法、正确使用逻辑运算符和谨慎进行位运算。通过实例代码学习,如 `(a &gt; b) ? &quot;greater&quot; : &quot;not greater&quot;`,能够帮助更好地理解和应用这些概念。掌握这些基础知识是编写高效、清晰C++代码的关键。
35 3
|
6月前
|
C语言
算术操作符、赋值操作符、复合赋值符
这篇文档介绍了算术和赋值操作符。算术操作符包括加&quot;+&quot;、减&quot;-&quot;、乘&quot;×&quot;、除&quot;/&quot;和求余&quot;%”,其中求余只适用于整数,结果正负由第一个运算数决定。赋值操作符有&quot;=&quot;用于给变量赋值,而复合赋值符如&quot;+=&quot;、&quot;-=&quot;等则结合了运算和赋值功能,简化代码编写。
35 1
运算符与表达式详解
运算符与表达式详解
|
6月前
|
编译器 测试技术 Go
表达式求值——隐式类型转换与操作符属性
表达式求值——隐式类型转换与操作符属性
|
C语言
赋值运算和赋值表达式
赋值运算和赋值表达式。
210 0
|
C语言
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值2
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值2
|
C语言 索引
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值1
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值1
|
编译器 C++
C++的运算符与表达式
在程序中,运算符是用来操作数据的,因此这些数据也被称为操作数,使用运算符将操作数连接而成的式子称为表达式
74 0
|
编译器 C语言 C++
学C的第十六天【操作符详解:9. 条件操作符;10. 逗号表达式;11. 下标引用,函数调用和结构函数;12.表达式求值:整型提升、算术转换、操作符的属性;练习:使用函数完成整型函数的打印、元素逆置】-2
12.表达式求值 1. 表达式求值的顺序一部分是由操作符的优先级和结合性决定。 2. 有些表达式的操作数在求值的过程中可能需要转换为其它类型。
101 0