C语言:详解操作符(下)

上一篇链接:C语言:详解操作符(上)
摘要:

在上篇文章中,我们已经讲过位操作符等涉及二进制的操作符,这些有助于帮助我们后期理解数据如何在计算机中运算并存储,接下来本篇将更多的讲述一些C语言中经常要使用到的操作符。

一、单目操作符

单目操作符是指只有一个操作数的操作符,主要有

!、++、–、&、*、+、-、~ 、sizeof、(类型)

单目操作符这些内容在我之前一篇文章有提过:算数操作符和算数操作数

二、逗号操作符

逗号操作符还是很非常有意思的,因为在日常学习中经常会有人不去重视,就容易出一些笑话,我们先来看个例子

int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式
c是多少?

此时C值是多少?是12?还是1?或者是3?
答案是都不是,是13。此时肯定会有人不明白了,其实这就跟逗号表达式的性质有关:

逗号表达式,从左向右依次执⾏整个表达式的结果是最后⼀个表达式的结果。

基于此性质,所以上面那个表达式实际上要一步一步执行,按照下图这样的顺序一步一步执行,并得到最终结果。
在这里插入图片描述
逗号操作符其他用法都是基于性质的,只要记住要先按步骤进行就行。

三、下标引用操作符[ ]、函数调用操作符( )

1、下标引用操作符[ ]

下标引用操作符是双目操作符,它有两个操作数,一般用来表示数组时会用到,人们往往会有一个误区,认为字母应该在外面,数字在里面,实际上是无所谓的,

例如:

int arr[9];
int 9[arr];

上面这两个其实是一样的,下标引用其实是类似于加减法之类的,两个操作数顺序位置并不重要。
在学到指针这些内容后,下标引用有了更多的用法,我个人觉得它还有解引用的用法。

2、函数调用操作符( )

函数调用操作符前面的是函数名,这个可以需要自己命名,里面的是要传的参数

函数调用操作符比较容易理解,可以看一下下面的例子:

#include <stdio.h>
void test1()
{
 printf("hehe\n");
}
void test2(const char *str)
{
 printf("%s\n", str);
}
int main()
{
 test1(); //这⾥的()就是作为函数调⽤操作符。
 test2("hello bit.");//这⾥的()就是函数调⽤操作符。
 return 0;
}

四、结构体成员访问操作符

C语言中虽然已经给出许多变量类型,例如:int、float、short等,但是有些变量还是无法描述,例如如果要描述一个学生,你需要知道他的名字、学号、身高、体重等等,这就需要其他类型了,C语言通过结构体给我们自己创建类型的方式来满足各种需要。

1、结构体的声明

struct tag
{
 member-list;
}variable-list;

描述上面说的那个学生变量:

struct Stu
{
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}; //分号不能丢

2、结构体的定义和初始化

定义的时候可以在主函数外面,也可以在里面:

struct Point
{
 int x;
 int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2

结构体变量初始化:

int main
{
 struct Stu s={"zhangsan",18,"nan","34285967"};
 }

(看看结构体中定义了哪些变量,一个一个赋值)

结构体嵌套:

struct Node
{
 int data;
 struct Point p;
 struct Node* next; 
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

3、结构体成员直接访问

结构体成员直接访问是通过操作符( . )来实现的

方式:结构体变量.成员名

例如:

struct Student
{
    char name[20];
    int age;
    int high;
}p = { "zhangsan" ,18,150 };
int main()
{
    printf("%s %d %d", p.name, p.age, p.high);
    return 0;
}

4、结构体成员间接访问

结构体成员的间接访问,是通过指向结构体的指针来实现的。

#include <stdio.h>
#include <string.h>
struct Stu
{
    char name[15];//名字
    int age; //年龄
};
void print_stu(struct Stu s)
{
    printf("%s %d\n", s.name, s.age);
}
void set_stu(struct Stu* ps)
{
    strcpy(ps->name, "李四");
    ps->age = 28;
}
int main()
{
    struct Stu s = { "张三", 20 };
    print_stu(s);
    set_stu(&s);
    print_stu(s);
    return 0;
}

五、操作符的优先级和结合性

1、操作符的优先级

操作符的优先级看下面这个表格就行:
在这里插入图片描述

2、操作符的结合性

操作符的结合性一般为左结合性和右结合性,其实结合性还是有些意思的,例如

int c=1;
int b=0;
b=(c++)+(c++)+(++c);

此处c的值就是有歧义的,所以要尽量避免写出这样的表达式。
结语:
C语言操作符的内容到这里也是初步结束了,以后会根据需求进行补充,鉴于本人能力有限,欢迎大家指出错误和意见。
创作不易,还请一键三连。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/386438.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

不要告诉我爸妈!三省吾身!保持健康的习惯——“早”读

三省吾身了? 引言代码第一篇 人民日报 不要告诉我爸妈第二篇 人民日报 【夜读】新的一年&#xff0c;保持健康的5个好习惯第三篇&#xff08;跳&#xff09; 人民日报 来啦 新闻早班车要闻社会政策 结尾 引言 我想我需要给我的文章再来点规范性的东西 让大家能够更好地阅读 比…

【java苍穹外卖项目实战三】nginx反向代理和负载均衡

文章目录 1、nginx反向代理2、nginx 反向代理的好处3、nginx 反向代理的配置方式5、nginx 负载均衡的配置方式6、nginx 负载均衡策略 我们思考一个问题&#xff1a; 前端发送的请求&#xff0c;是如何请求到后端服务的&#xff1f; 前端请求地址&#xff1a;http://localhost/…

猫头虎分享已解决Bug || 任务调度失败(Cron Job Failure):CronJobError, ScheduledTaskFailure

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

输出用“*”组成的X形图案。

输出用“*”组成的X形图案 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。 输出描述&#xff1a; 针对每行输入&#xff0c;输出用“*”组成的X形图案。 …

typescript中的Omit排除类型及Pick取想要的属性

Omit 的使用:排除类型 type OmitUser {name: string,age: number,sex:string } type newOmit Omit<OmitUser, sex>// 定义一个对象并将其类型设置为 newOmit const example: newOmit {name: "John",age: 30 };console.log( Omit 的使用:排除类型 , example…

黑色响应式全屏滚动主页源码

html5黑色大气的个人博客全屏滚动个人主页源码下载&#xff0c;右键记事本即可修改。HTMLJSCSS https://wfr.lanzout.com/iFmRe1o7csyh

svg基础(十)滤镜-feMerge(多滤镜叠加滤镜)

feMerge:多滤镜叠加滤镜 允许同时应用滤镜效果而不是按顺序应用滤镜效果。利用result存储别的滤镜的输出可以实现这一点&#xff0c;然后在一个 <feMergeNode>子元素中访问它 1 语法 <feMerge><feMergeNode in""></feMergeNode> </feM…

使用文件读取的open 函数,让你的csv pandas 尾部插入快如闪电

文章目录 简介1. pandas loc 尾部插入方法loc 尾部插入的速度 2. open 方法open方法 处理csv的速度open方法 处理csv代码 简介 笔者在处理稍大型(几十万条)的csv文件时&#xff0c;发现在csv文件中&#xff0c;使用panda的loc方法进行拼接&#xff0c;速度太过于缓慢。 笔者提…

深刻反思现代化进程:20世纪与21世纪的比较分析及东西方思想家的贡献

深刻反思现代化进程&#xff1a;20世纪与21世纪的比较分析及东西方思想家的贡献 摘要&#xff1a;随着人类社会的快速发展&#xff0c;现代化已成为全球范围内的普遍追求。然而&#xff0c;20世纪至21世纪的现代化进程并非一帆风顺&#xff0c;它伴随着环境破坏、社会不平等和文…

【leetcode热题100】不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1 …

安装 NVIDIA Chat with RTX

安装 NVIDIA Chat with RTX 0. NVIDIA Chat with RTX 是什么&#xff1f;1. 安装 NVIDIA Chat with RTX2. 使用 NVIDIA Chat with RTX3. NVIDIA Chat with RTX 下载地址 0. NVIDIA Chat with RTX 是什么&#xff1f; Chat With RTX 是一款演示应用程序&#xff0c;可让您个性化…

第8集《佛说四十二章经》

请大家打开讲议第九面&#xff0c;第十二章、举难劝修。 佛陀在这一章共举出二十种困难事情&#xff0c;以劝勉我们修学。一般人的生命没有目标&#xff0c;一天过一天&#xff0c;做事遇到困难就放弃了。这段经文的难是有主动的正面意义&#xff0c;所谓的难能可贵&#xff1…

【Linux学习】生产者-消费者模型

目录 22.1 什么是生产者-消费者模型 22.2 为什么要用生产者-消费者模型? 22.3 生产者-消费者模型的特点 22.4 BlockingQueue实现生产者-消费者模型 22.4.1 实现阻塞队列BlockQueue 1) 添加一个容器来存放数据 2)加入判断Blocking Queue情况的成员函数 3)实现push和pop方法 4)完…

Vue3快速上手(五)ref之对象类型的响应式数据

一、ref之对象类型的响应式数据 1.1 基本语法 import { ref } from vuelet x ref(初始值)console.log(xxx --> , x.value);x为一个RefImpl对象&#xff0c;该对象的value属性为实际值&#xff0c;在script里需要操作x.value来改变数据的值&#xff0c;在页面里则可以直接…

常用算法介绍-->快速排序

本篇文章我们来介绍一下快速排序的算法 1.简介 快速排序是对冒泡排序的一种改进&#xff0c; 它是不稳定的。由C. A. R. Hoare在1962年提出的一种划分交换排序&#xff0c;采用的是分治策略&#xff08;一般与递归结合使用&#xff09;&#xff0c;以减少排序过程中的比较次数…

PHP脉聊交友系统网站源码,可通过广告变现社交在线聊天交友即时通讯APP源码,附带视频搭建教程

探索全新社交体验&#xff1a;一站式PHP交友网站解决方案 &#x1f310; 全球化交友&#xff0c;无界沟通 在数字化的浪潮下&#xff0c;社交已不再受地域限制。我们的PHP交友网站不仅支持多国语言&#xff0c;还配备了即时翻译功能&#xff0c;让您轻松跨越语言障碍&#xff…

Pure Pursuit控制器路径跟随

参考博客&#xff1a; Pure Pursuit 纯追踪法 Autoware(Pure pursuit代码学习) 1 Pure Pursuit纯追踪法 适用场景&#xff1a;低速场景&#xff08;速度过高会产生转弯内切以及超调&#xff09; 简化前轮转向角和后轴将遵循的曲率之间的关系 (Gx,Gy)是下一个需要追踪的路点&a…

【实战】一、Jest 前端自动化测试框架基础入门(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)

文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…

C++【AVL树】

目录 1.AVL树&#xff08;高度平衡搜索二叉树&#xff09;定义 1.1平衡因子&#xff08;Balance Factor简写成bf&#xff09; 1.2avl树的定义 2.AVL树插入的基本操作 2.1逻辑抽象图 2.2插入流程 2.3左单旋 2.4右单旋 2.5右左双旋 2.6左右双旋 3.AVL树的检验技巧 3.1…

AI:127-基于卷积神经网络的交通拥堵预测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…