c语言:运算符、sizeof、逗号表达式、结构体

【C/C++】逗号表达式、算术运算符优先级 11 && 逻辑与 表达式&&表达式 左到右 双目运算符。12 || 逻辑或 表达式||表达式 左到右 双目运算符。7 == 等于 表达式==表达式 左到右 双目运算符。9 ^ 按位异或 表达式^表达式 左到右 双目运算符。10 | 按位或 表达式|表达式 左到右 双目运算符。8 & 按位与 表达式&表达式 左到右 双目运算符。6 > 大于 表达式>表达式 左到右 双目运算符。3 / 除 表达式/表达式 左到右 双目运算符。4 + 加 表达式+表达式 左到右 双目运算符。 阅读详情

学习顺序:sizeof运算 → 逗号表达式 → 函数调用运算符 → 结构体struct(定义、初始化、访问成员)

一、sizeof 运算符
核心规则

  1. sizeof 是运算符,不是函数
  2. sizeof(表达式) :只看表达式最终类型,不会运行表达式里面的代码(编译期就算出大小,运行阶段不计算,在链接的时候就完成了,到不了编译那一步)
  3. 普通short是2字节;int是4字节。
    表达式 short s =10; sizeof(s +9) :
  • s是short,和int数字9相加,发生整型提升,结果类型变成int
  • sizeof(s+9) = sizeof(int) = 4 //它只算类型
  • 变量`s本身的值不会被修改**,s依旧=10
    (因为还没有到编译那一步,它们就已经变成int了)
    示例代码

#include <stdio.h>
int main()
{
short s = 10;
int n = 8;
// s+9 运算时short提升为int(会往大的变),所以sizeof结果是4
printf(“%zd\n”, sizeof(s + 9));
printf(“s = %d\n”, s); // s的值仍然是10,sizeof没有执行s+9计算
return 0;
}

输出:
4
s = 10

二、逗号表达式

规则

exp1, exp2, exp3, … ,expN

  1. 从左往右依次执行每一个表达式(它有一些表达式是没用的,不会影响下一步结果)
  2. 整个逗号表达式最终结果 = 最后一个表达式的值
  3. 优先级极低,低于赋值运算符,想用逗号表达式必须加 ()

例题

int a = 1;
int b = 2;
// 括号内是完整逗号表达式
int c = (a>b, a=b+10, a, b=a+1);

分步执行:

  1. a>b :1>2 → 假,不改变变量
  2. a = b+10 → a = 2+10 = 12
  3. a → 取a的值12(无赋值)
  4. b = a+1 → b =12+1=13
    整个表达式结果是最后一项 b=a+1 的值 =13
    所以c = 13

注意:如果去掉外层括号 int c = a>b, a=b+10, a, b=a+1;
就不是整体逗号表达式!等价于 (int c = a>b), a=b+10, a, b=a+1; ,c只会拿到a>b的结果0。
*** 一定要把逗号表达式全部括起来
其他逗号表达式例子

// if判断里,逗号表达式依次执行,最终判断d>0
if (a = b + 1, c = a / 2, d > 0)
{

}
等价于if的条件是d>0

三、函数调用运算符 ()

  • () 叫函数调用运算符//函数调用是的符号
  • 操作数:函数名 + 0个或多个参数
  • 最少操作数:2个:函数名 + 空参数(无参函数调用)
    例: printf(“hehe\n”);
    操作数: printf (函数名)、 “hehe\n” (参数)

#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
printf(“hehe\n”); // () 函数调用运算符
Add(3, 5);
return 0;
}

四、结构体 struct

结构体:把多个不同类型的变量打包成一个自定义类型,用来描述一个事物(学生、设备信息)

  1. 结构体声明语法

struct 标签名
{
成员列表; // 多个成员变量,可以不同类型
} 全局变量列表; // 可以直接定义全局变量,也可以省略

示例:学生结构体

// 定义结构体类型 struct Stu
struct Stu
{
char name[20]; // 姓名
int age; // 年龄
double score; // 分数
};
注意:char类型,[ ]里面的数字是字符长度的限度值,一个汉字2个byte,1个char占1个byte,一共可以放10个字,最多放19个数字和符号

  1. 结构体变量初始化

两种写法:顺序初始化、指定成员初始化(推荐,可读性强)

#include <stdio.h>
struct Stu
{
char name[20];
int age;
double score;
};

int main()
{
// 方式1:按成员定义顺序依次赋值
struct Stu s1 = {“zhangsan”, 20, 60.0};

// 方式2:指定成员初始化,顺序可以打乱,推荐工程代码使用
struct Stu s2 = {.name = "lisi", .age = 25, .score = 85.5};

return 0;

}

  1. 结构体成员访问运算符 .

结构体变量.成员名

printf(“%s %d %lf\n”, s1.name, s1.age, s1.score);

  1. 结构体嵌套(结构体里面包含另一个结构体)

// 嵌套的子结构体
struct Id
{
char id[20];
int x;
};

struct Stu
{
char name[20];
int age;
struct Id id; // 成员是另外一个结构体
double score;
};

int main()
{
// 嵌套结构体初始化
struct Stu s1 = {“zhangsan”, 20, {“2025010102”, 6}, 60.0};
// 访问嵌套结构体成员:变量.子结构体.成员
printf(“%s %d %s %d %lf\n”, s1.name, s1.age, s1.id.id, s1.id.x, s1.score);
return 0;
}

五、配套课后小练习题

  1. sizeof题

short a=5;
printf(“%zd”, sizeof(a+3)); //输出?

short 变成int,是由(a+3)导致的,相当于一瓶空气被导入了一房间的空气里面。

答案:4

  1. 逗号表达式

c

int x=2,y=3;
int res = (x++, y=x+2, x+y);
// res等于?

答案:8

  1. 结构体填空

c

struct Book{
char bookname[30];
float price;
};
struct Book b = {.bookname=“C语言”, .price=49.9};
printf(“书名:%s,价格:%.1f”, b.bookname, b.price);

补充:学习关联(嵌入式)

  • struct 在嵌入式里超级常用:描述外设参数、设备信息、引脚配置。
  • . 访问结构体成员,后面学指针的时候还会学 -> 箭头访问。
  • 逗号表达式、位运算、sizeof,写驱动、宏定义经常见到。
C语言程序设计————运算符及表达式 算术运算符,移位运算符,位运算符,赋值运算符,单目运算符,关系运算符,逻辑运算符,条件运算符,逗号运算符 1,按照运算符在表达式中与链接运算对象的个数可分为: (1)单目运算符 (2)双目运算符 (3)三目运算符 (4)其他 2,运算符的优先级: 优先级指一个表达式中不同运算符进行操作的先后顺序。通常所以单 阅读详情

相关推荐

C语言基础知识:其他运算符及运算符的优先级

sizeof的使用会出现在平常写代码很多的地方,其用法也不仅仅限于上述的普通用法,在后续的动态内存分配也会经常用到等等。熟悉这一C语言运算符会让你提前对内存这一概念有所了解,对于后面C语言的难点也是重点——指针的理解有一定的帮助。

qq_34274756的博客 1098

C语言运算符分类总结

C语言运算符分类总结。

Code_Solitude的博客 183

【架构设计】DDD 到底解决了什么问题

DDD作为架构设计思想帮助微服务控制规模复杂度,那它是怎么做到的呢?第一章提出了架构的根本目是解决系统复杂度,并简要说明系统复杂度的六个来源及通用解法,为我们设计架构提供了清晰可执行的操作思路。

DreamSun的博客 1162

C语言运算符表达式

一、分类 C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(>、>=、==、!=、>、 二、运算符的结合性和优先级 1. 运算符的结合性 在C语言的运算符中,所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,其余运算符的结合方向是从左向右。 2.运算符的优先级 初等运算符(圆括号()、下标运算符[]、结构体成员运算符->

Sally的博客 4万+

【实战指南】从零构建UNet多分类分割数据集:标注、转换与训练全流程

本文提供了一份从零构建UNet多分类分割数据集的完整实战指南。详细介绍了使用Labelme进行图像标注的核心技巧与规范,并通过Python脚本将标注结果转换为模型可用的VOC格式。最后,指导如何修改经典的PyTorch版UNet代码,以适配自定义数据集并进行训练与测试,帮助读者完成从数据准备到模型训练的全流程。

arduino9maker的博客 289

PSOC Creator 入门教程超详细

最近工作原因需要使用到赛普拉斯的一款芯片,奈何以前没有用过,所以趁这次也学习了一些简单的用法,总结一下,希望能帮到有需要朋友,因为网上关于这方面的文章少的可怜,详细点的更是少之又少!废话少说,正文开始.

qm_mq的博客 5747

C语言中的逗号的作用,C语言逗号运算符和逗号表达式基础总结

逗号运算符的作用:1,起分隔符的作用:定义变量用于分隔变量:int a,b输入或输出时用于分隔输出表列 printf("%d%d",a,b)2,用于逗号表达式的顺序运算符语法:表达式1,表达式2,...,表达式n表达式的值:表达式n的值优先级:最低运算顺序:左->右例题总结错题1if(a>b, a>c) max=a;else max=0;t=...

weixin_39606911的博客 4464

给STM32供电,别只接VDD和GND!VBAT、VDDA这些引脚不接会怎样?

本文深入解析STM32电源设计中VBAT与VDDA引脚的关键作用,揭示仅连接VDD和GND可能导致的ADC精度下降、RTC功能异常等问题。通过实测数据对比不同连接方案,提供包括滤波电路设计、PCB布局布线和双电源自动切换在内的实用解决方案,帮助开发者优化系统稳定性与性能。

weixin_30521161的博客 632

C语言运算符和表达式

一、分类  C语言一共有34种运算符,10种运算类型,本节我们要掌握的有 算术运算符(+、-、、/、%)、 关系运算符(>、>=、==、!=、<、<=)、 逻辑运算符(!、||、&&)、 条件运算符、(?:)、 赋值运算符(=、+=、-=、=、/=、%=)、 逗号运算符(,)、 求字节运算符(sizeof)  ;若按参与运算的对象个数,C...

SqrsCbrOnly1的博客 4324

在Simulink中建立一个含高比例风电接入的弱电网模型

本文介绍了使用Simulink对含高比例风电接入的弱电网进行建模和稳定性分析的方法。主要包括创建Simulink项目、搭建风电场模型(含风力发电机和变流器)、建立弱电网模型、设计控制系统(MPPT算法等)、添加监测模块等步骤。通过仿真分析电网的电压稳定性、频率波动和动态响应等关键指标,评估高比例风电接入对弱电网的影响。该建模方法为研究可再生能源并网问题提供了实用工具,但实际应用中需根据具体条件细化模型参数和控制策略。

amy_mhd的博客 168

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3900

C语言中的算术运算符和算术表达式

C语言中的算术运算符和算术表达式 C语言中运算和表达式的数量很多,C语言正是因为丰富的运算符和表达式使其语言功能十分完善。C语言的运算符不仅具有不同的优先级,还有结核性。在表达式中,各运算表达量参与运算的先后要遵守运算符优先级别的规定,也要受运算符结合姓的制约,以便确定是自左向右还是自右向左进行运算。这种结合性,增加了C语言的复杂性。 一、C语言运算符简介 C语言的运算符可以分为以下几类:

sardine_c的博客 1万+

DA14531-外设驱动篇-UART收发通信应用

宏定义注解CFG_PRINTF用户开启串口串口打印宏设置波特率选择115200。

hejinwu1314的博客 730

c语言等号 逗号,C语言逗号运算符和逗号表达式

在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:表达式1,表达式2其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。【例】main() {int a=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("y=%d,x=%d",y,x);}本例中,y等于整个逗号表达式的值,...

weixin_39622289的博客 1252

突破Cloudflare 5秒盾:TLS指纹伪装+Playwright行为模拟,爬虫存活率从35%提至78%

TLS指纹精准识别:Cloudflare会解析客户端的TLS Client Hello包(如SSL版本、密码套件、扩展字段),Python的requests/urllib库的TLS指纹是“黑名单级”,请求一出即被拦截;行为特征检测:静态的浏览器伪装(如User-Agent)已失效,Cloudflare会监控页面加载后的行为(是否有鼠标移动、滚动、点击,行为是否机械);JS环境深度验证:通过WebGL、Canvas、字体渲染、Navigator属性生成浏览器指纹,无头浏览器的默认配置会被瞬间识别;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2362

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C语言的运算符和表达式

C语言的运算符和表达式 一、分类 C语言一共有34种运算符,10种运算类型,本节我们要掌握的有 算术运算符(+、-、、/、%)、 关系运算符(>、>=、==、!=、<、<=)、 逻辑运算符(!、||、&&)、 条件运算符、(?:)、 赋值运算符(=、+=、-=、=、/=、%=)、 逗号运算符(,)、 求字节运算符(sizeof) ;若按参与运算的对象个数,C语言运算符可分为单目运算符(如!) 、双目运算符(如+、-) 和三目运算符(如?:) 二、运算符的结合性和优先级

坤小白的博客 7812

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c语言逗号的作用情况,C语言逗号运算符和逗号表达式基础总结

逗号运算符的作用:1,起分隔符的作用:定义变量用于分隔变量:int a,b输入或输出时用于分隔输出表列 printf("%d%d",a,b)2,用于逗号表达式的顺序运算符语法:表达式1,表达式2,...,表达式n表达式的值:表达式n的值优先级:最低运算顺序:左->右例题总结错题1if(a>b, a>c) max=a;else max=0;t=...

weixin_31787547的博客 2748

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C语言】sizeof运算符 讲解与例题

sizeof运算符允许程序获取存储指定类型的值所需要的内存空间。表达式sizeof(类型名)的值是一个无符号整数,代表的是存储属于该类型的值所需要的字节数。如,sizeof(char)的值为1。但其实对于其他许多类型我们无法得到一个确切的值而是取决于具体实现。如在32位的机器上,sizeof(int)的值为4。注意,sizeof是一种特殊的运算符,因为编译器本身就能确定sizeof表达式的值。当然,除了类型之外,sizeof也可以用来求常量、变量和表达式的字节数。

Octopus2077的博客 1514

C语言:逗号、sizeof与最高优先级运算符

逗号运算符:优先级最低,必须加括号;返回最后一个表达式值,避免在数组初始化中误用。sizeof运算符:编译时求值,不执行表达式;数组作为函数参数退化为指针,字符串数组与指针的sizeof结果不同。最高优先级运算符()可改变优先级、类型转换;[]访问数组;和->访问结构体成员,优先级最高无需括号。

alwaysAlearner的博客 790

【C语言进阶深度学习记录】十四 C语言中 三目运算符和逗号表达式

文章目录1 三目运算符1.1 三目运算符的返回类型的代码案例分析2 逗号表达式2.1 逗号表达式代码案例分析2.2 如何用一行代码实现 strlen函数3 总结 1 三目运算符 三目运算符(a?b:c)可以作为逻辑运算的载体 规则: 当a为真时,返回b,否则返回c的值 如下面的代码: #include &amp;lt;stdio.h&amp;gt; int main() { int a = 1;...

厚积薄发 3041

【C语言进阶剖析】18、三目运算符和逗号表达式

1 三目运算符 三目运算符 (a ? b : c) 可以作为逻辑运算的载体 规则:当 a 的值为真时,返回 b 的值,否则返回 c 的值 下面看一下例子,初识三目运算符? // 18-2.c #include<stdio.h> void hello(){ printf("Hello!\n"); } int main(){ int a[3][3] = { ...

桑凯旋的博客 1551

【C语言进阶剖析】18.C语言中的三目运算符和逗号表达式

一、三目运算符 三目运算符( a ? b : c)可以作为逻辑运算的载体 规则:当 a 的值为真时,返回 b 的值;否则返回 c 的值 三目运算符( a ? b : c)的返回类型 通过隐式类型转换规则返回 b 和 c 中的较高类型 当 b 和 c 不能隐式转换到同一类型时将编译出错 二、逗号表达式 逗号表达式是C语言中的“粘贴剂” 逗号表达式用于将多个子表达式连接为一个表达式 逗号表达式的值为最后一个子表达式的值 逗号表达式中的前 N-1 个子表达式可以没有返回值 逗号表达式

老胡的博客 1943

详解逗号表达式

逗号表达式是C语言常见的一种运算符,使用得当会使得代码的效率大大提升,但也要注意逗号表达式不易理解的特点,避免造成不必要的麻烦。

Mylvzi的博客 6049

C语言中三目运算符和逗号表达式

--事物的难度远远低于对事物的恐惧!        前几章节分析了逻辑运算符、位运算符和 ++ --运算符,那么这个章节,我们来分析下三目运算符和逗号表达式。     C语言中的三目运算符表达式格式为:a ? b : c ,其规则为:     -当a的值为真时,返回b的值,否则返回C的值 来看看下边这段代码: #include &lt;stdio.h&gt; int main() {...

年少轻狂,幸福时光 2906

C语言进阶剖析 18 三目运算符和逗号表达式

三目运算符 三目运算符(a ? b : c)可以作为逻辑运算的载体 规则 : 当 a 为真时,返回 b 的值; 否则返回 C 的值 下面的程序运行结束后,a,b,c的值分别会是多少呢? int a = 1; int b = 2; int c = 0; c = a &amp;amp;amp;amp;amp;amp;amp;amp;lt; b ? a : b; (a &amp;amp;amp;amp;amp;amp;amp;amp;lt; b ? a : b) = 3;

Linux Openharmony Android Graphics Stack! 1085

c语言共有几种运算符_C语言的运算符和表达式有哪些

C语言的运算符和表达式有哪些C语言的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。以下是小编为大家搜索整理的C语言的运算符和表达式有哪些,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!运算符的种类、优先级和结合性C语言中运算符和表达式数量之多, 在高级语言中...

weixin_42615743的博客 4421
上一篇: c语言:递归
下一篇: c语言错题1
Code_Solitude
博客等级 码龄116天 1粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值