目录
一、逗号表达式(exp1,exp2,exp3,...,expN):
二、下标引用、函数调用和结构成员[ ]、( )、. 、->:
前言:
前面我们对操作符进行了简单的分类:
算术操作符 | 移位操作符 | 位操作符 |
赋值操作符 | 单目操作符 | 关系操作符 |
逻辑操作符 | 条件操作符 | 逗号表达式 |
下标引用、函数调用和结构成员 |
在上一篇文章中我们学习了单目、关系、逻辑与条件操作符的相关知识。本文我将继续按照顺序,带领小伙伴们一起学习操作符最后关于逗号表达式、下标引用、函数调用和结构成员这些部分。
一、逗号表达式(exp1,exp2,exp3,...,expN):
逗号表达式,就是用逗号隔开的多个表达式。
各位小伙伴们一起来看看下面的代码,想一想它的最终结果会是什么,会如何在屏幕上进行打印呢:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
printf("变量 c 的值为:%d\n", c);
return 0;
}
答案是它会在我们的屏幕上打印出“变量 c 的值为:13”。那么变量c的值为什么会是13呢?逗号表达式又是如何作用的呢?
逗号表达式的作用方式为:整个逗号表达式从左向右依次执行,整个表达式的结果是最后一个表达式的结果:
即上述代码的执行流程为,首先判断a与b的大小,判断为假,但是判断后没有进行赋值,变量a与变量b的值没有发生变化,继续向右执行;接着计算了b+10的值并将该值赋给了a,此时a的值变为12,继续向右执行;最后计算了b=a+1的值并将该值赋给了b,此时b的值变为了13;这时,整个逗号表达式内的各个表达式就执行结束了,而此时逗号表达式的最后一个表达式的结果为13,则将最后一个表达式的值13作为整个逗号表达式的结果赋给了c,所以在我们的屏幕上进行反馈打印时,打印出的变量c的值为13。
逗号表达式也可用于分支、循环语句的条件判断中:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
int c = 1;
int d = 0;
int i = 10;
for (i = 0; i < (i + 20, b = 1 - 5, a = b - 1, c = 3); i++)
{
if (a = b + 1, c = a / 2, d > 0)
{
printf("D > 0\n");
}
else
{
printf("D <= 0\n");
}
}
return 0;
}
这段代码中,首先进行循环条件判断中 i 的范围限制使用了逗号表达式,且逗号表达式从左向右依次执行后,最后一个表达式的结果为3,故整个逗号表达式的结果为3,也就是相当于与此时循环语句可以理解为:
for (i = 0; i < 3; i++);
即整个循环语句将会循环执行三次。
接着,在循环语句内部,分支语句的判断条件同样可以使用逗号表达式,逗号表达式的最后一个表达式为d>0,判断为假,即整个逗号表达式的判断结果为假,执行else语句。
所以整段代码的执行结果为循环执行三次else打印:
那么逗号表达式有什么实际作用呢?我们来看下面这样的代码:
a = get_val();
count_val(a);
while( a > 0 )
{
//业务处理
a = get_val();
count_val(a);
}
这样的代码(假代码,仅研究形式,不研究功能)理论上的功能是完备的,但是在书写方法上略显冗余,在需求功能更多时代码将会占用大量的空间,我们可以通过使用逗号表达式将其进行简化:
while (a = get_val(), count_val(a), a > 0)
{
//业务处理
}
采用这样的形式,可以将原本冗杂的写法,改写的更为简洁,大幅度提高我们书写代码的效率。
二、下标引用、函数调用和结构成员[ ]、( )、. 、->:
1.下标引用操作符[ ]:
下标引用操作符可是各位小伙伴们的老朋友了,这个操作符,在我们数组的学习和使用中可谓是符不离手了。它的使用没有什么难度,我们在这里简单对该操作符进行回顾即可。
下标引用操作符的操作数有两个:一个数组名 + 一个索引值:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//创建数组:
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//使用下标引用操作符数组元素:
int b = arr[9];
//操作符[ ]的两个操作数为:数组名arr和索引值9
printf("arr[9]中存放的数据元素为:%d\n", b);
return 0;
}
在使用时,下标引用操作符表示从下标引用以操作符的操作数数组名为名的数组中&#