新手入门C语言之其他操作符以及操作符属性

news2024/11/18 8:35:15

一.逗号操作符

1.形式: exp1, exp2, exp3    ......逗号表达式:由逗号隔开的一串表达式

2.执行过程:从左到右依次执行每一个表达式,表达式的结果是最后一个表达式的结果

int main() {
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10,a, b = a + 1);
		//     0    12  2      12 13  12
		//c = 13
	printf("%d", c);
	return 0;
}

此时,会依次执行a > b的判断,a = b + 10 ,b = a + 1,最后c的结果是a + 1的结果

逗号表达式实际上的值只与最后一个式子有关,因此它可以放到while函数中,例如:

int i = 0;
while(i++, i < 10){
    printf("%d",i);
} 

二.下标引用和函数调用

下标引用是[ ],函数调用是( )

对于下标引用,例如:

int main() {
	int arr[10] = { 0 };
	arr[5] = 6;	//[]就是下标引用操作符
	//[] 是操作符,他的操作数是: arr , 5

	return 0;
}

对于函数调用,例如:

void test() {
	printf("hehe");
}
//函数在调用的时候,函数名后面的括号就是函数调用操作符	()
//它的操作数是:Add 2 3	函数名+参数
//函数调用操作符最少有一个操作数   - 函数名
int main() {
	test();
	printf("hehe");
	printf("%d", 100);
	return 0;
}

函数调用操作符可以调用内置数据类型(C语言自身的类型),也可以调用自定义的数据类型(根据实际需要可以创建的类型)

三.结构体

结构体是一些值的结合,与数组类似,称为成员变量,但不同的是,结构体的每个成员可以是不同类型的变量,而数组的每个变量都是同种类型的,我们使用struct来创建结构体

例如,我们想声明一个学生类型,包括:姓名,性别,年龄,学号

                                其中涉及                字符串 字符串 整数 字符串

其中就用到了字符数组和整型数组。

代码如下:

struct student {
	char name[20];
	char sex[12];
	int age;
	char id[17];
}s5,s6,s7;		//全局变量

student是声明,其中s5,s6,s7是全局变量,在整个代码中都有作用。

int main() {
	//局部变量
	struct student s1 = { "张三","男","18","20220909" };
	struct student s2 = { .name = "李明", };

	printf("%s %s %d %s \n", s1.name, s1.sex, s1.age, s1.id);
	//结构体变量.结构体成员
	return 0;
}

我们在主函数中定义的是局部变量,可以有两种初始化方法,可以直接用双引号括起来,也可以使用.name的方式来直接定义某个值

当然,结构体变量是要在创建的时候进行初始化的

结构体也有嵌套的初始化,代码如下:

struct Point {
	int x;
	int y;

};
struct Point p1;

struct Node {
	int deta;
	struct Point p;
	struct Node* next;
};			//结构体嵌套初始化

这是结构体与指针相结合的内容

四.操作符的属性

1.操作符的属性:优先级,结合性

他们决定了表达式求值的计算顺序

优先级(相邻操作符才说优先级)一个表达式包含多个运算符,优先级高的先进行,低的后算

优先级相同,看结合性,根据运算符是左结合还是右结合

2.表达式求值

有时候我们进行运算的时候,会将多种不同类型的进行相加减,在运算前,会把他们转换为同一个类型,方法如下:

(1)整型提升    整型算数运算总是以缺省(默认)整型类型的精度计算的

例子:char  字符类型 也属于整型家族的  存储的是ASCII值,是整数
那么,如何进行整型提升的呢?
有符号的整数按照变量的数据类型的符号位提升(直接补充符号位)
无符号,高位补0

实例如下:

int main() {
	char a = 5;
	//5
	//00000000000000000000000000000101
	//0000 0101 - a						//截断
	char b = 125;
	//0111 1101 - b
	//首先转换为int类型,然后再计算,计算完放到c中
	char c = a + b;
	//0000 0101 - a		
	//0111 1101 - b	
	//a与b的长度小于int类型的长度,再计算的时候默认发生整型提升
	//00000000000000000000000000000101 - a
	//00000000000000000000000001111101 - b
	//00000000000000000000000010000010 - c
	//10000010 - c
	printf("%d", c);
	//按照有符号整数的形式打印
	//10000010 - c
	//11111111111111111111111110000010 - c   补码
	//10000000000000000000000001111110 - c	 原码
	return 0;
}

(2)算数转换:如果某个操作符的各个操作数右不同的类型,除非一个操作数转换为另一个类型,否则无法运算

排名如果靠后,需要转换为排名靠前的

五.问题表达式解析

例子一:

//表达式的求值部分由操作符的优先级决定 

a*b + c*d + e*f

执行顺序可能是以下两种可能:

当他们的顺序可能出现不同的时候,就出现了歧义,这是个问题表达式

例子二:

c + --c;

我们知道会先运算--c,但是不清楚是先获得c的值,还是运算后再带入c的值,出现了歧义

例子三:

对于这个代码,编译器不同导致了结果的不同

表达式四:

我们不清楚fun()是先取还是后取,出现了歧义

表达式五:

不同的编译器结果不同

因此,我们尽量不要写出过于复杂的表达式。

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

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

相关文章

给定长度为n(n<=20)的数组a,-20<=ai<=20, 每次操作选择i,j,使a[i] += a[j], 在31次操作内使a不递减,输出每次操作的i,j

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5, …

SpringBoot项目实现文件上传,MINIO+OSS阿里云

MINIO 安装以及部署 官网&#xff1a;MinIO | Code and downloads to create high performance object storage 下载后是一个minio.exe的文件&#xff0c;可以先创一个文件夹来存放数据以及文件 在文件的目录下cmd进入控制台 minio.exe server data 启动成功后控制台会打印账…

代码随想录算法训练营第59天 | 583.两个字符串的删除操作 + 72.编辑距离 + 编辑距离总结篇

今日任务 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇 583.两个字符串的删除操作 - Medium 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以…

IntelliJ IDEA 创建Spring Boot 项目整合jdbc详细步骤

IntelliJ IDEA 创建Spring Boot 项目&整合jdbc详细步骤 1、打开 IntelliJ IDEA 软件2、使用 "Spring Initializr" 作为项目类型&#xff0c;新建项目工程3、选择对应的SpringBoot版本和依赖4、Spring Boot 项目的结构5、创建一个TestController&#xff0c;并运行…

个性化纹身设计,Midjourney带你探索独一无二的艺术之美

hello,大家好&#xff0c;欢迎回来。 在当今社会&#xff0c;纹身已经变得非常常见。 在寻求与众不同的个性化纹身时&#xff0c;你是否曾经为了找不到独特的设计而苦恼&#xff1f; 现在&#xff0c;Midjourney将为你打开一扇全新的艺术之门&#xff0c;引领你探索纹身设计…

matplotlib绘图初步

文章目录 绘制曲线图完整流程图像属性 绘制曲线图 matplotlib是python中最常用的可视化库&#xff0c;提供了不同坐标系下的二十余种常用图像&#xff0c;并且提供了动态图像绘制的方法&#xff0c;可以满足科学计算中的绝大多数可视化需求。而在matplotlib中&#xff0c;绝大…

基于Redis限流(固定窗口、滑动窗口、漏桶、令牌桶)(肝货!!!)

近期redis复习的比较多&#xff0c;在限流这方面发现好像之前理解的限流算法有问题&#xff0c;索性花了一天“带薪摸鱼”时间肝了一天&#xff0c;有问题可以评论区探讨。 废话不多说&#xff0c;正片开始 目录 Maven固定窗口滑动窗口算法漏桶算法令牌桶算法 Maven 有些不用的…

[HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

【计网】TCP的三次握手四次挥手

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 三次握手&#xff08;Connection Establishment&#xff09; 四次挥手&#xff08;Connection Termination&#xff09; 结语 我…

Echarts与后台(mongoose)交互

Echarts引入地址可参考 echarts组件引入 <template><div><div id"main" style"width: 600px;height:400px;"></div></div> </template><script setup> import { onMounted, ref } from vue; import * as echa…

JavaScript 数组、遍历

数组 多维数组&#xff1a;数组里面嵌套 一层数组为二维数组。一维数组的使用频率是最高的。 如果数组访问越界会返回undefined。 数组遍历 数组方法Array.isArray() 这个方法可以去判定一个内容是否是数组。

32单片机基础:GPIO输出

目录 简介&#xff1a; GPIO输出的八种模式 STM32的GPIO工作方式 GPIO支持4种输入模式&#xff1a; GPIO支持4种输出模式&#xff1a; 浮空输入模式 上拉输入模式 下拉输入模式 模拟输入模式&#xff1a; 开漏输出模式&#xff1a;&#xff08;PMOS无效&#xff0c;就…

基于SpringBoot的气象数据监测分析大屏

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

简单聊聊如何零基础入门机器视觉

在这个充满科技奇迹的时代里&#xff0c;机器视觉像一面魔法镜&#xff0c;赋予机器以“视觉”&#xff0c;让它们能够理解和解释这个世界。对于热爱探索新知的大学生和研究生们来说&#xff0c;学习机器视觉不仅是开启未来科技大门的钥匙&#xff0c;更是一次激动人心的冒险之…

RisingWave最佳实践-利用Dynamic filters 和 Temporal filters 实现监控告警

心得的体会 刚过了年刚开工&#xff0c;闲暇之余调研了分布式SQL流处理数据库–RisingWave&#xff0c;本人是Flink&#xff08;包括FlinkSQL和Flink DataStream API&#xff09;的资深用户&#xff0c;但接触到RisingWave令我眼前一亮&#xff0c;并且拿我们生产上的监控告警…

备战蓝桥杯————双指针技巧巧解数组1

利用双指针技巧来解决七道与数组相关的题目。 两数之和 II - 输入有序数组&#xff1a; 给定一个按升序排列的数组&#xff0c;找到两个数使它们的和等于目标值。可以使用双指针技巧&#xff0c;在数组两端设置左右指针&#xff0c;根据两数之和与目标值的大小关系移动指针。 …

动态规划--持续更新篇

将数字变成0的操作次数 1.题目 2.思路 在numberOfSteps函数中&#xff0c;首先设置f[0]为0&#xff0c;因为0已经是0了&#xff0c;不需要任何步骤。然后&#xff0c;使用一个for循环从1迭代到输入的整数num。对于每个整数i&#xff0c;如果i是奇数&#xff0c;则将f[i]设置为…

uniapp离线打包(使用Android studio打包)

一、准备工作 安装HbuilderX&#xff0c;记住版本号下载对应HbuilderX版本的Android离线SDK&#xff0c;如我使用3.6.18版本打包&#xff0c;则对应应下载3.6.18版本的SDK&#xff08;官网不提供旧版本的SDK&#xff0c;有些需要自己找&#xff09;官网下载地址&#xff1a;ht…

目标检测-Transformer-ViT和DETR

文章目录 前言一、ViT应用和结论结构及创新点 二、DETR应用和结论结构及创新点 总结 前言 随着Transformer爆火以来&#xff0c;NLP领域迎来了大模型时代&#xff0c;成为AI目前最先进和火爆的领域&#xff0c;介于Transformer的先进性&#xff0c;基于Transformer架构的CV模型…

QGIS编译(跨平台编译)之七十:【Windows编译错误处理】找不到vector_tile.pb.h、vector_tile.pb.cc

文章目录 一、错误描述二、错误原因分析三、错误处理一、错误描述 ①无法打开源文件“vector_tile.pb.h” ②无法打开包含文件:“vector_tile.pb.h”:No Such file or directory ③无法打开源文件:“vector_tile.pb.cc”:No Such file or directory 二、错误原因分析 qgis\…