c语言基础6

1.逗号表达式

逗号表达式,就是用逗号隔开的多个表达式。

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

我们来看下面的一个代码:

int main()
{
	int a = 1;
	int b = 2;
	int ret = (a > b, a = b + 2, b, b = a + 1);
	printf("%d", ret);
	return 0;
}

按照上面的规则应该为5,那么到底是不是呢?我们来看看。

 在逗号表达式中最后一个表达式的结果为整个表达式的结果,但是前面的表达式可能会影响最后一个表达式的值。

2.结构体

1.结构体的声明

在这里struct是关键词,假如我们需要描述一个学生的名字和年龄。

struct Stu
{
char name[20]; //名字
int age; //年龄
};

注意:在这里的Stu是结构体的名字不是变量。

2.结构体的初始化
struct Stu
{
	char name[20]; //名字
	int age; //年龄
};
int main()
{
	struct Stu s1 = { "zhang",18 };
	struct Stu s2= { "lisi",23 };
	return 0;
}
3. 结构成员访问操作符(.)

我们要如何打印结构体呢?我们就要使用结构成员访问操作符(.)来进行访问成员。

演示如下:

struct Stu
{
	char name[20]; //名字
	int age; //年龄
};
int main()
{
	struct Stu s1 = { "zhang",18 };
	struct Stu s2= { "lisi",23 };
	printf("%s %d", s1.name, s1.age);
	return 0;
}

结果如下:

3. 操作符的属性:优先级、结合性

在数学计算中我们知道先算乘除后算加减,那么在c语言中有没有相似的规则呢?

其实C语⾔的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。下面我们来看一个例子:

int main()
{
	int b = 1 + 2 * 3;
	printf("%d",b);
	return 0;
}

这个结果大家应该都会知道为7,这里就是典型的优先级表现,*的优先级比+的优先级高,所以先算*后算+

运算符的优先级顺序很多,下⾯是部分运算符的优先级顺序(按照优先级从高到低排列),建议大概
记住这些操作符的优先级就行,其他操作符在使用的时候查看下面表格就可以了。
• 圆括号( () )
• 自增运算符( ++ ),自减运算符( -- )
• 单目运算符( + 和 - )
• 乘法( * ),除法( / )
• 加法( + ),减法( - )
• 关系运算符( < 、 > 等)
• 赋值运算符( = )
由于圆括号的优先级最⾼,可以使用它改变其他运算符的优先级。


操作符优先级详解icon-default.png?t=N7T8https://zh.cppreference.com/w/c/language/operator_precedence

4.整型提升

C语言中整型算术运算总是至少以缺省整型类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

1.整型提升的意义

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度⼀般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
通用CPU(general-purposeCPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsignedint,然后才能送入CPU去执行运算。

2.整型提升的规则

1. 有符号整数提升是按照变量的数据类型的符号位来提升的
2. 无符号整数提升,高位补0

我们来看一串代码:

int main()
{
	char a = -2;
	char b = 10;
	printf("%d", a + b);
	return 0;
}

在这串代码中可以看到创建了两个char类型的变量,并且都进行赋值,但值得思索的是我们给char类型赋值int 类型的时候是怎么放进去的,其实存放到a中时发生了截断,也就是说一开始-2的补码有32为bit但是只存进去了8位,这8位是后面的8位,也就是11111110 ,但是在计算过程中又要进行整型提升,也就意味着它们在计算时又通过整型提升变成32bit位进行计算。

5.问题表达式

我们来看一串代码:

int main()
{
int i = 10;
i = i-- - --i * ( i = -3 ) * i++ + ++i;
printf("i = %d\n", i);
return 0;
}

当出现这样的代码时,给人的感觉就是很难读懂,可读性差,由于优先级的不确定这个代码在不同编译器上的结果可能不同。

再来看一串代码:

#include <sdtio.h>
int fun()
{
static int count = 1;
return ++count;
}
int main()
{
int answer;
answer = fun() - fun() * fun();
printf( "%d\n", answer); //输出多少?
return 0;
}

这个代码其实也是有问题的,因为我们不知道函数调用的顺序是从哪一个fun开始的。所以也存在不同编译器,结果不同的现象。

谢谢

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

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

相关文章

程序员成被裁最多的职业,互联网成围城,“转码”神话破灭?

随着互联网蓬勃发展&#xff0c;“转码”一直被视为找不到工作时的灵丹妙药。所谓转码&#xff0c;就是转行成为程序员。专业太偏&#xff1f;没关系&#xff0c;可以转码。失业了&#xff1f;没关系&#xff0c;可以转码。不知道该做什么工作&#xff1f;那就转码吧。程序员薪…

资产盘点系统架构与实践

资产盘点系统架构与实战 随着企业规模的不断扩大&#xff0c;资产管理变得越来越重要。为了更好地管理企业资产&#xff0c;许多公司都开始使用资产盘点系统。本文将介绍资产盘点系统的架构和实战。 一、概述 资产盘点系统是一种用于管理企业资产的软件系统。它可以帮助企业…

抽象工厂模式-C#实现

该实例基于WPF实现&#xff0c;直接上代码&#xff0c;下面为三层架构的代码。 一 Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式 {public abstrac…

MPNN(Message Passing Neural Network)、graph pooling 、unpooling

The state encoder is mainly composed of MPNN layers organized into DenseNet blocks, which use graph pooling and unpooling layers (see Section S1.5†) to reduce the memory cost during training.

华为机考入门python3--(0)模拟题3-计算字符串重新排列数

分类&#xff1a;排列组合 知识点&#xff1a; 计算字符串中每个字符出现的次数 Counter(string) 计算列表中每个元素出现的次数 Counter(list) 阶乘 math.factorial(num) 排列去重 题目来自【华为招聘模拟考试】 先把每个字符当成唯一出现过一次&#xff0c;计算所有排列…

CSS 之 图片九宫格变幻效果

一、简介 ​ 本篇博客用于讲解如何实现图片九宫格变幻的样式效果&#xff0c;将图片分为九块填充在33的的九宫格子元素中&#xff0c;并结合grid、hover、transition等CSS属性&#xff0c;实现元素hover时&#xff0c;九宫格子元素合并为一张完整图片的动画效果。 ​ 为了简化…

【Linux C | 进程】Linux 进程间通信的10种方式(1)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Nacos注册中心

Nacos注册中心 前言一、初识Nacos二、服务注册到nacos1.引入依赖2.配置nacos地址3.重启微服务 三、Nacos配置1.权重配置2.环境隔离2.1 创建namespace2.2给微服务配置namespace 四、Nacos与Eureka的区别 前言 一、初识Nacos Nacos是是SpringCloudAlibaba的组件,是一个动态服务…

springboot中JSP模版集成

一.配置 引入JSP解析依赖 <!--c标签库--> <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version> </dependency><!--让内嵌tomcat具有解析jsp功能--> <dependency>&l…

实现上下文初始化参数

实现上下文初始化参数 问题方案 要解决上述问题,需要执行以下任务: 创建Web应用程序。创建检索初始化参数的servlet。指定初始化参数。构建Web应用程序。访问servlet。1. 创建Web应用程序 要使用NetBeans IDE创建Web应用程序,需要执行以下步骤: 选择“开始”→“所有程序”…

【Web】NSSCTF Round#17 Basic个人wp(全)

题目作为小练手还行&#xff0c;具体细节不必较劲。 目录 ①真.签到 ②真的是文件上传吗&#xff1f; 解法1 解法2 ①真.签到 访问/robots.txt base解码在线工具 hint直接base16解码&#xff0c;也算真给hint了&#xff0c;新生一个一个翻过去就好,在[SWPUCTF 2022 新生…

【C++中的STL】函数对象

函数对象 函数对象概念谓词概念 内建函数对象算术仿函数关系仿函数逻辑仿函数&#xff08;基本用不到&#xff09; 函数对象概念 重载函数调用操作符的类&#xff0c;其对象常称为函数对象&#xff0c;函数对象使用重载的()时。行为类似函数调用&#xff0c;也叫仿函数。 函数…

Element table组件内容\n换行

漂亮的页面总是让人心旷神怡&#xff0c;层次清晰的页面让用户操作起来也是易于上手及展示。 如下的页面展示就是非常low的&#xff1a;用户根本阅读其中的数据。 在这个页面&#xff0c;根据用户填写过程生成多次填写记录&#xff0c;如果不进行层次性的展示&#xff0c;数据…

Nestjs 异常拦截器

一、异常拦截器 目标&#xff1a;访问路径不存在时&#xff0c;返回结果中包含请求路径path 实现&#xff1a;1、创建一个异常过滤器&#xff0c;负责将捕获作为HttpException类实例的异常 2、访问底层平台Request、Response&#xff0c;通过访问Request对象&#xff0c;提取原…

微信小程序-04

rpx&#xff08;responsive pixel&#xff09;是微信小程序独有的&#xff0c;用来解决屏适配的尺寸单位。 import 后跟需要导入的外联样式表的相对路径&#xff0c;用 ; 表示语句结束。 定义在 app.wxss 中的样式为全局样式&#xff0c;作用于每一个页面。 在页面的 .wxss 文…

竞赛练一练 第30期:GESP和电子学会相关题目练习

Day14&#xff1a;CIE一级2022.06_报时的公鸡 故事背景&#xff1a;公鸡在黎明时分会打鸣迎接太阳升起&#xff0c;古人也将鸡鸣声当做晨起的“闹钟”。 1. 准备工作 &#xff08;1&#xff09;背景&#xff1a;根据下图绘制两张背景&#xff1b; 01 02 &#xff08;2&…

第5章 (python深度学习——波斯美女)

第5章 深度学习用于计算机视觉 本章包括以下内容&#xff1a; 理解卷积神经网络&#xff08;convnet&#xff09; 使用数据增强来降低过拟合 使用预训练的卷积神经网络进行特征提取 微调预训练的卷积神经网络 将卷积神经网络学到的内容及其如何做出分类决策可视化 本章将…

仰暮计划|“她就是用她的一双小脚把我们兄弟姐妹几个拉扯大的”

在残存的一些老物件中&#xff0c;在一些泛黄的相片中&#xff0c;掩藏着岁月的冲刷和青葱的时光。曾经无忧无虑的少女早已白发苍苍&#xff0c;不复青春貌美&#xff1b;曾经在父母面前笑闹的孩子早已变成他人眼中的长辈。 ——题记 她的身影也许并不高大&#xff0c;甚至还略…

Windows11 鼠标拖动文件到CMD控制终端窗口无效,无法显示具体文件路径

对于某些用户来说&#xff0c;他们可能会在Windows 11上遇到鼠标拖动文件到CMD控制终端时&#xff0c;无法显示具体文件路径的情况。 系统更新&#xff0c;习惯基础操作无效了&#xff0c;真的有点烦&#xff0c;不会提问就无计可施。 果然善于提问&#xff0c;才有果子吃 问…

Linux-动静态库

背景 在实践中&#xff0c;我们一定会使用别人的库&#xff08;不限于C、C的库&#xff09;&#xff0c;在实践中&#xff0c;我们会使用成熟、被广泛使用的第三方库&#xff0c;而不会花费很多时间自己造轮子&#xff0c;为了能更好地使用库&#xff0c;就要在学习阶段了解其…
最新文章