当前位置: 首页 > news >正文

C语言复习笔记--操作符详解(下)

        开始今天的复习,复习接上回C语言复习笔记--操作符详解(上)-CSDN博客.下面就从结构体访问操作符来说说.

结构成员访问操作符

  结构体

        首先先引入一下结构体,C语⾔已经有很多内置类型,如:char,short,int,long,float,double等,但是只有这些内置类型还是不够的,描述⼀个学⽣需要 名字、年龄、学号、⾝⾼、体重等.C语⾔增加了结构体这种⾃定义的数据类型,让我们可以创造适合的类型.

        结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如: 标量、数组、指针,甚⾄是其他结构体。

        结构的声明

struct tag

{

member-list;

}variable-list;

一定不要忘记结构体后面有;

例子:

struct Stu

{

        char name[20];//名字

        int age;//年龄

        char sex[5];//性别

        char id[20];//学号

}; //分号不能丢

        结构体变量的定义和初始化

        结构体一般用{}来初始化,具体事例见下:

//变量的定义
struct Point
{
	int m;
	int n;
}p2, p3;
struct Point p1;

//初始化
struct Point p1 = { 1,2 };
//用.可以指定初始化,不需要加上结构体的名字
struct Point p2 = { .n = 3,.m = 4 };

struct Node
{
	struct Point;
	struct Node* next;
}n2 = { {0,1},NULL };//也可以直接初始化(不要忘记=)
//如果内部嵌套了另一个结构体,要再加一个{}去初始化.
struct Node n1 = { {1,2},NULL };

  结构成员访问操作符

        结构体成员的直接访问

        结构体成员的直接访问是通过点操作符(.)访问的。点操作符接受两个操作数.

        使⽤⽅式:结构体变量.成员名

struct Point
{
	int x;
	int y;
}p = { 1,2 };
int main()
{
	printf("x: %d y: %d\n", p.x, p.y);
	return 0;
}

        结构体成员的间接访问

        有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针,这是就要间接访问.

        使⽤⽅式:结构体指针->成员名

struct Point
{
	int x;
	int y;
}p = { 1,2 };
int main()
{
	struct Point* p1 = &p;
	printf("%d %d", p1->x, p1->y);
	return 0;
}

        这里只是结构体的一个引入,更多关于结构体的知识会在后面的复习中提及.

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

        优先级、结合性,这两个属性决定了表达式求值的计算顺序

  优先级

        优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏.各种运算符的优先级是不⼀样的,相邻的操作符优先级高的先计算.

        运算符的优先级顺序很多,下图是部分运算符的优先级顺序(按照优先级从高到低排列),建议⼤概记住这些操作符的优先级就⾏.可以使用()改变其他运算符的优先级.

  结合性

        如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执⾏),少数运算符是右结合(从右到左执⾏),⽐如赋值运算符( = ).

        要是想看其他的优先级和结合性可以去           https://zh.cppreference.com/w/c/language/operator_precedence看下.

表达式求值

  整型提升

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

        看个例子:

        那么如何进行整型提升呢?

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

  算术转换

        如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型,否则操作就⽆法进⾏。下⾯的层次体系称为寻常算术转换.

        如果某个操作数的类型在下面这个列表中排名靠后,那么首先要转换为另外⼀个操作数的类型后执行运算.

  一些问题表达式

        可能看起来好像没什么问题,但是如果这里面的字母代表一个表达式呢?如果里面都有a++这种表达式,那么计算的先后就会影响到最终表达式的结果.

        在写表达式时一定要主意,在该加()的地方就加上,防止出现一些问题表达式.今日复习到此结束,大家晚安~

相关文章:

  • 蓝桥杯 之 LCA算法
  • 搜广推校招面经六十一
  • 多线程案例-单例模式
  • Tcp套接字编程
  • go - grpc入门
  • 5G_WiFi_CE_杂散测试
  • C语言入门教程100讲(0)从了解C语言的发展史开始
  • 3月29日星期六今日早报简报微语报早读
  • 【Qt】Qt 类的继承与内存管理详解:QObject、信号槽与隐式共享
  • Conda配置Python环境
  • 实时目标检测新突破:AnytimeYOLO——随时中断的YOLO优化框架解析
  • 侯捷 C++ 课程学习笔记:C++ 中引用与指针的深度剖析
  • CS2 DEMO导入blender(慢慢更新咯)
  • Mayo Clinic Platform在人工智能医疗领域的现状及启示意义研究
  • 深度学习——图像余弦相似度
  • 基于华为设备技术的端口类型详解
  • 嵌入式八股RTOS与Linux--中断篇
  • vue如何实现前端控制动态路由
  • 基于pycatia的CATIA零部件激活状态管理技术解析
  • Centos7,tar包方式部署rabbitmq-3.7.6
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 怒江州委常委、泸水市委书记余剑锋调任云南省委省直机关工委副书记
  • 海南儋州市委副书记任延新已赴市人大常委会履新
  • 大学2025丨专访南开人工智能学院院长赵新:人工智能未来会变成通识类课程
  • 合肥一季度GDP为3003.88亿元,同比增长6.6%
  • “世纪火种”嘉年华启动,69家单位加入阅读“朋友圈”