C语言基础之——操作符(下)

前言:我们在上篇文章中已经对5种操作符进行了讲解,那么本篇文章将继续讲解剩余的5种操作符。

一.关系操作符

  • >
  • >=
  • <
  • <=
  • != 用于测试"不相等"
  • == 用于测试"相等"

关系操作符都是我们平时经常用到的操作符,非常的简单,但是这里有一个小小的陷阱:

那就是**"="和"=="** 的区别。一定要记住,在C语言中**"="是赋值** ,"=="才是比较是否相等

二.逻辑操作符

  • && 逻辑与(并且)
  • || 逻辑或(或者)

逻辑操作符实际上和上一篇文章里的位操作符有些相似,但是逻辑操作符并不是对两个变量进行操作,而是对两个表达式进行判断

还是熟悉的例子,我是一名企业高管,我现在手里有一个项目,我需要程序员A并且程序员B两个人来完成它。

假如这个项目是否能完成用comp 来表示,A和B程序员在则为1,不在则为0

comp = A && B;

只有当A和B都为1时 ,comp的结果才为1反之为0

现在我又说我需要程序员A或者程序员B两个人来完成它。

comp = A || B;

A和B必须全为0 ,comp的结果才为0反之为1

这里我们来简单写个代码来加深大家的理解:

cs 复制代码
#include<stdio.h>
int main()
{
	int age;
	scanf("%d", &age);
	if (age >= 0 && age < 18)
	{
		printf("小孩");
	}
	return 0;
}

当年龄在0~18之间(包括0不包括18)我们认为你都是一个小孩,这就要用到**&&**。

三.条件操作符

格式:

表达式1 ? 表达式2 : 表达式3

条件操作符是唯一一个三目操作符,它需要三个操作数,那么它是怎么运作的呢???

我们可以看到表达式1后边有一个**"?"** 这表示我们需要对表达式1的结果进行判断

当表达式1结果为真时 ,我们执行表达式2而不执行表达式3反之则执行3而不执行2

我们通过一个例子来具体讲解:

cs 复制代码
#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int m = a > b ? a : b;
	printf("%d", m);
	return 0;
}

我们比较 a 和 b 的大小并让 m 来接收较大值 ,按规矩我们就是先对 a > b 进行判断为真则 m = a;为假则 m = b

其实细心的小伙伴们已经可以看出,这个操作符其实可以看做是一个简化的 if-else 条件语句

四.逗号表达式

表达式1 , 表达式2 , 表达式3...表达式n

逗号表达式,也就是用逗号隔开的多个表达式组成的整体。

逗号表达式会从左到右依次执行各个表达式,整个表达式的结果是最后一个表达式的结果。

cs 复制代码
#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = (a > b, a = b + 10, a, b = a + 20);
	printf("%d", c);
	return 0;
}

来看这段代码,你能说出来c的值吗???

有的小伙伴可能直接说:这多简单了,不是说是最后一个表达式的值吗?那就是30呗。

大错特错!!!

我们说过,是多个表达式从左向右依次执行,而且如果表达式有赋值,那么就会改变变量的值

我们依次来看:

  • 先是 a > b,不成立,结果为0。
  • 然后是a = b + 10,a的值变为了30。
  • 然后又是单独的一个a,不用操作。
  • 最后是b = a + 20,b的值变为了50,也就是c = 50。

这里要注意一点,不管是条件操作符还是逗号表达式 ,如果表达式中有赋值运算 ,就一定要用括号括起来否则编译器则会识别为重定义,多次初始化

五.下标引用,函数调用,结构成员访问

1.下标引用操作符 [ ]

所谓下标,其实是数组中元素所对应的下标,也就是[ ]里的数字。

它的操作数是:一个数组名+一个索引值

int arr[10];//创建数组

arr[9] = 10;//使用下标引用操作符

[ ]的两个操作数是 arr 和 9 。

2.函数调用操作符 ( )

函数调用操作符能接收一个或多个操作数:第一个是函数名,剩余的都是传递给函数的参数。

实例如下:

cs 复制代码
#include<stdio.h>
int Add(int a, int b)
{
	return a + b;
}
int main()
{
	int a = 2;
	int b = 5;
	int sum = Add(a, b);//()函数调用操作符
	printf("haha");//()函数调用操作符
	return 0;
}

3.结构成员访问操作符

. 结构体.成员名

-> 结构体指针->成员名

cs 复制代码
#include<stdio.h>
struct Person
{
	char name[10];
	int age;
};
void Print(struct Person* pb)
{
	printf("%s %d\n", (*pb).name, (*pb).age);
	printf("%s %d\n", pb->name, pb->age);
}
int main()
{
	struct Person p = { "张三",18 };
	printf("%s %d\n",p.name,p.age);
	Print(&p);
	return 0;
}

如上代码,其中指针其实也可以用**"."** 来调用成员,但是没有**"->"**方便快捷。

总结

关于操作符剩余五种的知识讲解到这里就要结束啦,这五种相较于前五种较为简单,相信大家能够很快掌握!

喜欢博主文章的小伙伴们记得一键三连哦!

我们下期再见!

相关推荐
磊 子2 分钟前
多态类原理+四种类型转换+异常处理
开发语言·c++·算法
脆皮炸鸡7555 分钟前
库制作与原理~动态链接
linux·开发语言·经验分享·笔记·学习方法
XMYX-06 分钟前
26 - Go recover 捕获错误:优雅恢复的真正意义
开发语言·golang
小白学大数据7 分钟前
基于大模型的Python智能爬虫:语义识别与数据清洗实践
开发语言·爬虫·python·数据分析
迷渡26 分钟前
聊一聊 Bun 用 Rust 重写这件事
开发语言·后端·rust
古怪今人34 分钟前
Gradle构建工具 Groovy/Kotlin DSL的现代化自动化构建工具
开发语言·kotlin·自动化
赏金术士35 分钟前
Kotlin 协程与挂起函数(Coroutines & suspend)入门到实战
android·开发语言·kotlin
y = xⁿ1 小时前
Java并发八股学习日记
java·开发语言·学习
xifangge20251 小时前
【深度排障】从 OS 底层寻址剖析 javac 不是内部或外部命令 核心报错:变量空间隔离与自动化部署终极范式
java·开发语言·jdk·自动化
肖恩想要年薪百万1 小时前
JSP中常用JSTL标签
java·开发语言·状态模式