C语言第十六课:操作符详解(下)——逗号表达式、下标引用、函数调用、结构成员操作符与操作符属性

目录

前言:

一、逗号表达式(exp1,exp2,exp3,...,expN):

二、下标引用、函数调用和结构成员[ ]、( )、. 、->:

        1.下标引用操作符[ ]:

        2.函数调用操作符( ):

        3.结构体成员访问操作符 . 、->:

        ①.结构体成员访问操作符 .:

        ②.结构体成员访问操作符->:

三、操作符属性:

四、总结:


前言:

        前面我们对操作符进行了简单的分类:

算术操作符 移位操作符 位操作符
赋值操作符 单目操作符 关系操作符
逻辑操作符 条件操作符 逗号表达式
下标引用、函数调用和结构成员

        在上一篇文章中我们学习了单目、关系、逻辑与条件操作符的相关知识。本文我将继续按照顺序,带领小伙伴们一起学习操作符最后关于逗号表达式下标引用函数调用结构成员这些部分。

一、逗号表达式(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;
}

        在使用时,下标引用操作符表示从下标引用以操作符的操作数数组名为名的数组中&#

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

銮崽的干货分享基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值