欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > C语言复习笔记--操作符详解(下)

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

2025/5/29 19:25:13 来源:https://blog.csdn.net/2301_80159237/article/details/146632230  浏览:    关键词: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++这种表达式,那么计算的先后就会影响到最终表达式的结果.

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com