【C语言】8.C语言操作符详解(2)
文章目录
- 6.单⽬操作符
- 7.逗号表达式
- 8.下标访问[]、函数调⽤()
- 8.1 [ ] 下标引⽤操作符
- 8.2 函数调⽤操作符
- 9.结构成员访问操作符
- 9.1 结构体
- 9.1.1 结构的声明
- 9.1.2 结构体变量的定义和初始化
- 9.2 结构成员访问操作符
- 9.2.1 结构体成员的直接访问
- 9.2.2 结构体成员的间接访问
6.单⽬操作符
单目操作符有这些:
!、++、--、&、*、+、-、~ 、sizeof、(类型)
单目操作符的特点是只有一个操作数,在单目操作符中只有 &
和 *
没有介绍,这2个操作符,我放在后面指针那一节介绍。
需要注意
&作为双目操作符的时候是按位与,作为单目操作符的时候是取地址。
a & b
—>按位与
&a
—>取地址
7.逗号表达式
exp1,exp2,exp3,...expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
例1:
int main() {int a = 1;int b = 2;int c = (a > b, a = b + 10, a, b = a + 1);printf("%d\n", c);return 0;
}
打印:
13
- 先算
a>b
,这步没什么影响。因为没有赋值,只是单纯的比较了一下。这个表达式的结果是0。 - 然后算
a = b + 10
,a=2+10=12。这个表达式的结果是12。 - 然后算
a
,这步没什么影响,因为没有赋值。这个表达式的结果是12。 - 然后算
b = a + 1
,b=12+1=13。这个表达式的结果是13。 - 上面一步得到的13,是逗号表达式的值,所以c=13。
- 打印c的值,输出13。
逗号表达式一定要从左向右算,因为前面的运算可能会影响后面。
我们接着来看下面一段代码:
int main() {int a = 0;a = get_val();count_val(a);while (a > 0) {a = get_val();count_val(a);}return 0;
}
这段代码我们可以看到3,4行和6,7行一样,看起来比较麻烦。
我们可以优化一下:
int main() {int a = 0;while (a = get_val(),count_val(a), a > 0) {}return 0;
}
实际上两个代码的功能一样,但是看上去逻辑清晰了不少。
8.下标访问[]、函数调⽤()
8.1 [ ] 下标引⽤操作符
int main() {int arr[10] = { 1,2,3,4,5 };int m = arr[4];//数组中下标是4的元素//[ ]:下标引用操作符;操作数是arr和4;这个4我们叫做数组下标或索引//3+5:+是操作符;3和5是操作数printf("%d\n", m);return 0;
}
8.2 函数调⽤操作符
int Add(int x, int y) {return x + y;
}int main() {printf("hehe\n");//这里的():就是函数调用操作符;操作数是printf和hehe\nprintf("%d\n",100);//操作数是printf和%d\n和100int ret = Add(3, 5);//操作数是Add,3,5//函数调用操作符最少有几个操作数?//1个,在一个函数不去传参的时候,就只有1个操作数,也就是函数名return 0;
}
9.结构成员访问操作符
9.1 结构体
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量、数组、指针,甚至是其他结构体。
9.1.1 结构的声明
struct tag
{member-list;//成员列表,这个里面至少要有1个成员
}variable-list;//变量列表
9.1.2 结构体变量的定义和初始化
创建结构体变量:
//学生类型
struct Student {//成员变量char name[20];int age;float score;
};struct Student s3;//全局变量int main() {int a;struct Student s1;//局部变量//这个s1就是用Student这个学生类型创建的对象。struct Student s2;return 0;
}
//学生类型
struct Student {//成员变量char name[20];int age;float score;
}s4, s5, s6;//全局变量
//这里面的s4, s5 ,s6和上面的s3一个意思,就是写法不同
初始化结构体变量:
//学生类型
struct Student {//成员变量char name[20];int age;float score;
}s4 = { "小李",22,22.2 }, s5, s6;//全局变量struct Student s3 = { "王五",25,88.8 };//全局变量int main() {int a;struct Student s1 = { "翠花",20,98.0 };//局部变量struct Student s2 = { "旺财",18,69.8 };return 0;
}
结构体变量的嵌套定义和初始化:
struct Point {int x;int y;
};struct S {char ch;struct Point p;int arr[10];double d;
};int main() {int a;struct Point p = { 10,20 };struct S s = { 'a',{4,5},{1,2,3,4,5,6,7},3.14 };return 0;
}
9.2 结构成员访问操作符
9.2.1 结构体成员的直接访问
结构体变量.结构体成员名
->
这个是依赖指针的,会在后面讲指针的章节详细讲到。
struct Point {int x;int y;
};struct S {char ch;struct Point p;int arr[10];double d;
};int main() {int a;struct Point p = { 10,20 };struct S s = { 'a',{4,5},{1,2,3,4,5,6,7},3.14 };printf("%c\n", s.ch);//访问了结构体变量s里面的ch元素printf("坐标是:%d %d\n", s.p.x, s.p.y);printf("%d\n", s.arr[0]);printf("%lf\n", s.d);return 0;
}
打印:
a
坐标是:4 5
1
3.140000
9.2.2 结构体成员的间接访问
有时候我们得到的不是一个结构体变量,而是得到了一个指向结构体的指针。
结构体指针->成员名
#include <stdio.h>
struct Point
{int x;int y;
};int main()
{struct Point p = {3, 4};struct Point *ptr = &p;ptr->x = 10;ptr->y = 20;printf("x = %d y = %d\n", ptr->x, ptr->y);return 0;
}
现在看不懂没事,后面讲指针的时候会讲到。
相关文章:
【C语言】8.C语言操作符详解(2)
文章目录 6.单⽬操作符7.逗号表达式8.下标访问[]、函数调⽤()8.1 [ ] 下标引⽤操作符8.2 函数调⽤操作符 9.结构成员访问操作符9.1 结构体9.1.1 结构的声明9.1.2 结构体变量的定义和初始化 9.2 结构成员访问操作符9.2.1 结构体成员的直接访问9.2.2 结构体成员的间接访问 6.单⽬…...
vivado 物理约束KEEP_HIERARCHY
KEEP_HIERARCHY Applied To Cells Constraint Values • TRUE • FALSE • YES • NO UCF Example INST u1 KEEP_HIERARCHY TRUE; XDC Example set_property DONT_TOUCH true [get_cells u1] IOB Applied To Cells Constraint Values IOB_XnYn UCF Examp…...
Linux 三十六章
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要…...
ntsd用法+安装包
ntsd是一个强大的进程终止软件,除了少数系统进程之外一律杀掉 用法 1.ntsd -c q -p 进程的pid 2.ntsd -c q -pn 进程名 记得解压到System32里面 当然,资源管理器的进程是可以杀的所以也可以让电脑黑屏 同样可以让电脑黑屏的还有taskkill /f /im 进程…...

Nacos 微服务管理
Nacos 本教程将为您提供Nacos的基本介绍,并带您完成Nacos的安装、服务注册与发现、配置管理等功能。在这个过程中,您将学到如何使用Nacos进行微服务管理。下方是官方文档: Nacos官方文档 1. Nacos 简介 Nacos(Naming and Confi…...

Kubernetes集群上的Etcd备份和恢复
在本教程中,您将学习如何在Kubernetes集群上使用etcd快照进行etcd备份和恢复。 在Kubernetes架构中,etcd是集群的重要组成部分。所有集群对象及其状态都存储在etcd中。为了更好地理解Kubernetes,有几点关于etcd的信息是您需要了解的。 它是…...
创建型模式 (Python版)
单例模式 懒汉式 class SingleTon:# 类属性_obj None # 用来存储对象# 创造对象def __new__(cls, *args, **kwargs):# 如果对象不存在,就创造一个对象if cls._obj is None:cls._obj super().__new__(cls, *args, *kwargs)# 返回对象return cls._objif __name__…...
【收录 Hello 算法】9.4 小结
目录 9.4 小结 1. 重点回顾 2. Q & A 9.4 小结 1. 重点回顾 图由顶点和边组成,可以表示为一组顶点和一组边构成的集合。相较于线性关系(链表)和分治关系(树),网络关系(图&am…...
MYSQL数据库基础语法
目录 友情提醒第一章:数据库简述1)数据库简述2)常见的数据库软件3)MySQL数据库安装和连接4)SQL语句分类①DDL(Data Definition)②DML(Data Manipulation)③DQL࿰…...
R实验 参数检验(二)
实验目的:掌握正态分布和二项分布中,功效与样本容量之间的关系;学会利用R软件完成一个正态总体方差和两个正态总体方差比的区间估计和检验。 实验内容: (习题5.28)一种药物可治疗眼内高压,目的…...

【Linux】进程信号及相关函数/系统调用的简单认识与使用
文章目录 前言一、相关函数/系统调用1. signal2. kill3. abort (库函数)4. raise (库函数)5. alarm 前言 现实生活中, 存在着诸多信号, 比如红绿灯, 上下课铃声…我们在接收到信号时, 就会做出相应的动作. 对于进程也是如此的, 进程也会收到来自 OS 发出的信号, 根据信号的不同…...
Spring (14)什么是Spring Boot
Spring Boot是一个开源的Java基础框架,旨在简化Spring应用的创建和开发过程。Spring Boot通过提供一套默认配置(convention over configuration),自动配置和启动器(starters)来减少开发者的开发工作量和配置…...

区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测
区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测 目录 区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-KDE卷积神经网络结合…...
Java集合框架全景解读:从源码到实践精通指南
1. Java集合框架简介 在Java中,集合框架是用于存储和处理数据集合的一组类和接口。它提供了一系列的数据结构,比如列表(List)、集(Set)和映射(Map)。这些数据结构为开发者处理数据提…...

Python | Leetcode Python题解之第107题二叉树的层序遍历II
题目: 题解: class Solution:def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:levelOrder list()if not root:return levelOrderq collections.deque([root])while q:level list()size len(q)for _ in range(size):node q.popl…...

H4vdo 台湾APT-27视频投放工具
地址:https://github.com/MartinxMax/H4vdo 视频 关于 H4vdo RTMP lock 屏播放视频工具,可以向目标发送有效载荷,播放目标的屏幕内容。目标无法曹作计算机 使用方法 安装依赖 根据你的操作系统选择一个安装程序 RTMP 服务端 ./rtsp-simple-server.…...

数据结构(树)
1.树的概念和结构 树,顾名思义,它看起来像一棵树,是由n个结点组成的非线性的数据结构。 下面就是一颗树: 树的一些基本概念: 结点的度:一个结点含有的子树的个数称为该结点的度; 如上图&#…...

HTML静态网页成品作业(HTML+CSS)——川西旅游介绍网页(2个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…...

MySQL数据库单表查询中查询条件的写法
1.使用比较运算符作为查询条件 ; !; >; >; <; <; 如上图所示,可以使用命令select 字段,字段 from 表名 where Gender “M”; 即挑选出Gender “M” 的教师, 如上图所示,可以使用命令select 字段,…...

SQL靶场搭建
概述 简单介绍一下SQL靶场的搭建,以及在搭建过程中遇到的一些问题。使用该软件搭建靶场相对简单,适合新手小白。当然,也可以在自己的虚拟机下进行搭建,相对来说就较为复杂。本章主要讲解使用Phpstudy进行SQL靶场搭建。 这里我推…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...