【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
  1. 先算a>b,这步没什么影响。因为没有赋值,只是单纯的比较了一下。这个表达式的结果是0。
  2. 然后算a = b + 10,a=2+10=12。这个表达式的结果是12。
  3. 然后算a,这步没什么影响,因为没有赋值。这个表达式的结果是12。
  4. 然后算b = a + 1,b=12+1=13。这个表达式的结果是13。
  5. 上面一步得到的13,是逗号表达式的值,所以c=13。
  6. 打印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;
}

现在看不懂没事,后面讲指针的时候会讲到。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(中):订阅智能体OSS实现

传送门&#xff1a; 《2024.5组队学习——MetaGPT&#xff08;0.8.1&#xff09;智能体理论与实战&#xff08;上&#xff09;&#xff1a;MetaGPT安装、单智能体开发》《2024.5组队学习——MetaGPT&#xff08;0.8.1&#xff09;智能体理论与实战&#xff08;下&#xff09;&…

【线段图案】

描述 KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的线段图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;1~100&#xff09;&#xff0c;表示线段长度&#xff0c;即“*”的数量。 输出描述…

是德科技 DSOS054A MSOS054A示波器

产品 带宽 通道数 最大存储器深度 DSOS054A 高清晰度示波器 500 MHz 4 个模拟通道 800 Mpts MSOS054A 高清晰度示波器 500 MHz 4 个模拟通道和 16 个数字通道 800 Mpts Infiniium S 系列示波…

R语言使用 ggscidca包优雅的绘制支持向量机决策曲线

DCA(Decision Curve Analysis)临床决策曲线是一种用于评价诊断模型诊断准确性的方法&#xff0c;在2006年由AndrewVickers博士创建&#xff0c;我们通常判断一个疾病喜欢使用ROC曲线的AUC值来判定模型的准确性&#xff0c;但ROC曲线通常是通过特异度和敏感度来评价&#xff0c;…

产品研发流程(方法)

产品研发流程&#xff08;方法&#xff09; IPD&#xff08;Integrated Product Development&#xff0c;集成产品开发&#xff09;和敏捷开发是现代软件开发中常见的两种方法论。 IPD IPD研发流程 IPD是一种系统化的产品开发方法&#xff0c;旨在通过跨职能团队的协作和集成…

vue项目报错:internal/modules/cjs/loader.js:892 throw err;

前言&#xff1a; vue项目中无法正常使用git&#xff0c;并报错情况。 报错信息&#xff1a; internal/modules/cjs/loader.js:892throw err;^ Error: Cannot find module D:\project\sd_wh_yth_front\node_modules\yorkie\src\runner.js 报错处理&#xff1a; npm install y…

GitHub的原理及应用详解(二)

本系列文章简介&#xff1a; GitHub是一个基于Git版本控制系统的代码托管平台&#xff0c;为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中&#xff0c;包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…

夏天晚上热,早上凉怎么办?

温差太大容易引起感冒 1.定个大概3点的闹钟&#xff0c;起来盖被子。有些土豪可以开空调&#xff0c;我这个咸鱼没有空调。 2.空调调到合适的温度&#xff0c;比如20几度。

Redisson的setConnectionMinimumIdleSize配置,设置小一点有什么影响?

设置最小空闲连接数 (connectionMinimumIdleSize) 是影响 RedissonClient 性能和资源利用的一个关键配置。让我们详细了解一下这个参数的作用及其影响。 什么是 connectionMinimumIdleSize&#xff1f; connectionMinimumIdleSize 参数用于定义连接池中保持的最小空闲连接数。…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 18 节&#xff09; P18《17.ArkUI-状态管理Observed 和 ObjectLink》 第一件事&#xff1a;嵌套对象的类型上加上 Observed 装饰器…

基于网络爬虫技术的网络新闻分析(四)

目录 4.2 系统异常处理 4.2.1 爬虫异常总体概况 4.2.2 爬虫访问网页被拒绝 5 软件测试 5.1 白盒测试 5.1.1 爬虫系统测试结果 5.1.2 中文分词系统测试结果 5.1.3 中文文章相似度匹配系统测试结果 5.1.4 相似新闻趋势展示系统测试结果 5.2 黑盒测试 5.2.1 爬虫系统测…

shell编程-结构化命令

1、if-then语句 如果command命令执行成功&#xff08;退出状态码为0&#xff09;&#xff0c;then部分的命令就会执行 if comand then commands fi 或 if comand: then commands fi 例如&#xff1a; #!/bin/bash if date who then echo this is test …

2024电工杯数学建模 - 案例:最短时间生产计划安排

# 前言 2024电工杯(中国电机工程学会杯)数学建模思路解析 最新思路更新(看最新发布的文章即可): https://blog.csdn.net/dc_sinor/article/details/138726153 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#xff0c;预测2022今年国赛也会与该模型相关。 1 模型描…

CoShNet:使用复数改进神经网络

使用复数改进神经网络 文章目录 一、说明二、了解卷积神经网络三、进入混合神经网络四、令人惊叹的 CoSh 网络五、复杂函数的神奇性质六、相位一致性七、结论 一、说明 本文题为“CoShNet&#xff1a;使用Shearlets的混合复杂值神经网络”&#xff0c;提出了在混合神经网络中使…

深入理解SVM和浅层机器学习算法的训练机制

深入理解SVM和浅层机器学习算法的训练机制支持向量机&#xff08;SVM&#xff09;的训练过程SVM的基本概念SVM的损失函数训练方法 浅层机器学习算法的训练机制决策树K-最近邻&#xff08;K-NN&#xff09;朴素贝叶斯 结论 深入理解SVM和浅层机器学习算法的训练机制 在探讨浅层…

nrf52832自定义蓝牙名字过长,广播显示不全

自定义蓝牙名字过长&#xff0c;广播显示不全 原因:nrf52832默认使用蓝牙4.x的广播&#xff0c;它的广播包数据只有32byte数据&#xff0c;当广播已经包含足够多的数据的时候&#xff0c;广播每次过长就会显示部分名称&#xff0c;即便你选择"BLE_ADVDATA_FULL_NAME"…

Python学习---基于多任务协程的并发下载器案例

目标&#xff1a;使用协程实现网络图片的下载&#xff08;适合网络io&#xff09; 多进程&#xff1a; 密集CPU任务&#xff0c;需要充分使用多核CPU资源&#xff08;服务器&#xff0c;大量的并行计算&#xff09;的时候&#xff0c;用多进程。 缺陷&#xff1a;多个进程之间通…

Python基础学习笔记(六)——列表

目录 一维列表1. 索引的查询与返回2. 切片3. 添加元素4. 删除元素5. 更改元素6. 排序7. 生成式 一维列表 列表&#xff0c;也称数组&#xff0c;是一种有序、可变、允许重复元素的组合数据结构&#xff0c;属于可变序列&#xff0c;由方括号[]内、用逗号分隔的一组元素组成。 列…

【Clickhouse】DB::Exception: Table is in readonly mode问题解决

1. 问题描述 公司电力检修&#xff0c;机房断电再上电之后clickhouse的一张表出现了只读现象 2024.05.20 16:58:08.702472 [ 173655 ] {17C25AD8068BBE9A} <Error> executeQuery: Code: 242, e.displayText() DB::Exception: Table is in readonly mode (version 20.5…

展现金融科技前沿力量,ATFX于哥伦比亚金融博览会绽放光彩

不到半个月的时间里&#xff0c;高光时刻再度降临ATFX。而这一次&#xff0c;是ATFX不曾拥有的桂冠—“全球最佳在线经纪商”(Best Global Online Broker)。2024年5月15日至16日&#xff0c;拉丁美洲首屈一指的金融盛会—2024年哥伦比亚金融博览会(Money Expo Colombia 2024) 于…