【C语言】操作符下(详细)


修改时间为2022年11月15日

今天继续介绍操作符的内容。还有上节忘记附上有关操作符优先级的表,在本章末尾会补上。

一.关系操作符

== 、!= 、> 、>= 、< 、<=

==操作符用于测试相等,!=操作符用于测试不相等。后面4个操作符与数学中符号的作用类似。

作用 这些操作符的结果都是整形,如果操作符两端的操作数符合他们之间的关系,那结果就为真,返回1;如果不符合操作符指定的关系,那就为假,返回0。
因此通常关系操作符的结果可以赋给整形变量,但经常用于if(选择语句)和while(循环语句)中作为测试表达式。在这里插入图片描述

注意

  1. =是赋值操作符,==是关系操作符(相当于数学上的等号=)
  2. 语句的类型和作用后面会讲

二.逻辑操作符

&&(逻辑与)、||(逻辑或)
这个可以简单理解为并且、或者,类似与离散数学中的合取、析取

作用它们用于对表达式进行求值,测试它们的真假,&&两端操作数全真才为真,||两端操作数有真便是真,下面会讲到它们的详细用法
多说无益,举个粒子
在这里插入图片描述

这个if语句表示为如果year能被4整除并且能被100整除,那么就把year打印出来。

在这里插入图片描述

这个if括号内的测试表达式表示如果year能被4整除并且不能被100整除就打印year,或者year能被400整除就打印year。

注意不知道了解过操作符优先级的朋友注意到没有,%等操作符的优先级要高于&&和||的优先级,按原理来讲应该先执行%等操作,再进行&&和||操作,可惜不是。
这是因为&&和||操作符会控制子表达式的求值顺序,也是会控制表达式的求值顺序的四个操作符之二,即从左到右,左边表达式总是先求值,这也导致一个很有趣的现象短路求值
短路求值,实际很简单。&&操作符的左操作数如果为假,那么即使右边的操作数为真,整个表达式也是为假,所以干脆右边表达式就不计算,反正没意义。
同理,||操作符的左操作数如果为真,那么无论右操作数为真还是为假,整个表达式都为真,那么计算右边表达式就无意义了,所以右边表达式也不计算。

举个离子在这里插入图片描述

在这两个if语句的测试表达式中都是只执行&&和||的第一个子表达式,后面的表达式没执行,这就是短路求值

360笔试题

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++ && ++b && d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
}
//程序输出的结果是什么

结果是1 2 3 4。
为什么?
a先使用,再++,所以a为0,为假,a++ && ++b整个表达式为假,不对b进行++操作。因为a++ && ++b为假,表达式的值为0,0&&d++也为假,d也不进行++操作。

现在将&&操作符改为||,将a改为1。

#include <stdio.h>
int main()
{
  int i = 0,a=1,b=2,c =3,d=4;
  i = a++||++b||d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
}
//程序输出的结果是什么

结果为2 2 3 4。
为什么?
a先为1,后++,因为a为真,a++||++b为真,不对b进行++操作。因为a++||++b为真,表达式的值为1,1||d++也为真,同样不对d进行++操作。


条件操作符

expression1?expression2:expression3
它是三目操作符,有三个操作数

用法首先判断expression1的值,如果它的值为真,就返回expression2的结果,整个条件语句的值就是expression2的值;如果它的值为假,就返回expression3的结果,整个条件语句的值就是expression3的值

作用它的作用和if语句类似,都包含判断的表达式
举个简单的例子在这里插入图片描述

可以解读为,如果a>b,就返回b的值;如果a<b,就返回b的值。

注意它也是今天要介绍的最后一个可以控制表达式求值顺序的操作符,无论表达式的优先级有多大,它都是从expression1执行。


逗号表达式

expression1,expression2,…,expressionN

用法这些表达式从左到右进行计算,最后返回最后一个表达式的值。在这里插入图片描述

expression1的值为10,expression2的值为12,到expression3时,a已完成++,c已完成–,所以a=11,c=11,a+c就等于22。

逗号表达式运用得当,可以使代码更加简便在这里插入图片描述
这里num = get_num(n)出现两次,可以用逗号表达式改写为在这里插入图片描述
如果其中一句语句要修改,你就可以到测试表达式的地方进行修改,不用费心去找相同的语句修改。

下标引用,函数调用,结构成员

这一部分只是简单认识,后面会详细讲到

  1. [ ] 下标引用操作符一般出现在数组
int arr[10] = {0};//这里创建一个数组,[]内是数组的元素个数,int是数组每个元素的类型
                   //但[]不是下标引用
printf("%d",arr[0]);//这个才是下标引用,表示数组中下标为0的元素
                    //C语言中数组中每个元素对应一个下标,下标总是从0开始,往后每个元素
                    //依次加一,在本例中,数组的最后一个元素的下标为9   
  1. ()函数调用操作符
    函数调用操作符有一个或多个操作数,它的第一个操作数就是函数名,其余操作数是传递给函数的参数。
int main()
{
  int x = 1;
  int y = 2;
  Add(x,y);//Add是函数名,x和y是参数
  return 0;
}
  1. ->和 . 操作符用来访问结构体成员
    生活中一些对象不能简单地使用C语言的内置类型(int,char,float,double等)来描述,比如描述一个人,不能简单地使用内置类型来表示,所以就有了结构体类型,它将一些类型聚合在一起。
    例子
struct Student s//struct Student是我们创建的类型,s是我们在这个类型上创建的变量
{
	char name[20];//这些都是成员名
	int age;
	char sex[10];
}
int main()
{
	struct Student s = {“木南”,18,“男”};//结构体的初始化
	printf("%s %d %s",s.name,s.age,s.sex);//这就是结构体成员访问操作符
	//结构体变量.成员名
	struct Student*ps = &s;
	printf("%s %d %s",(*p).name,(*p).age,(*p).sex);
	printf("%s %d %s",p->name,p->age,p->sex);//这也是结构体成员访问操作符
	//结构体指针->成员名
}

如果有一个结构体变量s,那么s.a就是访问结构体中a成员,如果有一个结构体指针,那么访问它的成员就得用->。


附表
在这里插入图片描述
在这里插入图片描述


完结

操作符就讲完了,如果还有不懂请在评论区留言,我一定会尽己所能帮助大家;如果我有哪些错误,请一定帮忙指出,我会认真改正。感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值