逗号表达式和赋值表达式是C语言中常用的表达式类型。它们可以用于各种目的,包括计算和评估表达式、初始化变量、为函数调用提供参数以及将值分配给变量。
逗号表达式
逗号表达式允许在单个语句中计算和评估多个表达式。逗号分隔每个表达式,并且表达式从左到右依次执行。逗号表达式可以用于以下目的:
- 将多个表达式组合为一个语句。
- 初始化多个变量。
- 为函数调用提供多个参数。
- 将值分配给多个变量。
逗号表达式运算法则
- 逗号表达式从左到右依次执行。
- 逗号表达式中,每个表达式都独立计算和评估。
- 逗号表达式中,每个表达式的值都会被丢弃,除了最右边的表达式。
- 逗号表达式的值是其最右边的表达式的值。
以下是一些逗号表达式运算法则的示例:
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。
期待