前言
在C/C++中有许多拥有各种功能的操作符,用来实现我们需求,比如最常用的 = 就是操作符之一,又比如数***算中常见的+、-、* 和 / ,本系列文旨在通过各种详细的例子来介绍这些操作符,让你与它们之间不再陌生,本文是此系列的最后一篇文章,篇幅较短,内容也比较简单,话不多说直接开始吧!
分类
算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构体成员。
注意:
本文继续介绍剩余的几个操作符,本系列已经完结,想看更多内容请移步作者的内容中心。
文中图片上的代码所引用的头文件#include
正文
下标引用
下标引用操作符 []
下标引用操作符 []
下标操作符主要出现在数组中,如arr[1]表示arr数组中的第二个数,因为数组下标是从0开始 此操作符形式为: 一个数组名+[一个索引值]
//下标引用操作符
int main()
{
int arr[5] = { 0,1,2,3,4 };
printf("arr[3] =%dn", arr[3]);
return 0;
}
函数调用
函数调用操作符 ()
函数调用操作符往往出现于一个函数中,()内可以接受一个或者多个操作数,作为参数传递给函数使用
//函数调用操作符
int add(int a, int b)
{
return a+b;
}
int main()
{
int a = 2;
int b = 3;
int c = add(a, b);
printf("c =%dn", c);
return 0;
}
访问结构的成员 . ->
在C语言中,有些包含多个变量的函数通常是通过结构体来解决,如学生信息包含姓名、学号、年龄等,图书信息包括书名、编号、价格等,那么在输出其中一个变量如书名或全部输出时就需要用到访问一个结构成员的操作符 . 结构体.成员名或指针的形式 -> 结构体指针->成员名
//访问一个结构的成员
struct Book
{
char name[20];
char numb[20];
float price;
};
int main()
{
struct Book b = { "C语言", "C890110", 10.24 };
struct Book * pa = &b;
printf("书名 %sn编号 %sn价钱 %.2fn", b.name, b.numb, b.price);
printf("nnn书名 %sn编号 %sn价钱 %.2fn",pa->name,pa->numb,pa->price );
return 0;
}
表达式求值
表达式求值的顺序一部分是由操作符的优先级和结合性决定的。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型
//表达式求值
int main()
{
int a = 2;
int b = 3;
float c = 2.5;
float d = a + b * c;
printf("c =%.2fn", d);
return 0;
}
隐式类型转换
整型提升
C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被装潢为普遍整型,这种转换称为整型提升
简言之,整型提升就是将不满4字节的类型提升后进行运算,然后再截断存储
//隐式类型转换-整型提升
int main()
{
char a = 5;
char b = 125;
char c = a + b;
printf("%dn", c);
return 0;
}
整型提升第二个例子
通过地址说明整型提升后带来的数值变动
//整型提升第二个例子
int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb60000;
if (a == 0xb6)
printf("a");
printf("a =%dn", a);
if (b == 0xb600)
printf("b");
if (c == 0xb60000)
printf("c");
return 0;
}
算术转换
如果某个操作符的各个操作数属于不同类型,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行
//隐式类型转换-算术转换
int main()
{
int a = 2;
float b = 3.5;
printf("a*b =%.2fn", a * b);
return 0;
}
操作数的属性
操作数主要有三个影响因素:1.操作符的优先级 2.操作符的结合性 3.是否控制求值顺序
两个相邻的操作符先执行哪个,主要取决于他们的优先级,如果两者优先级相同,则取决于他们的结合性
//操作符的属性
int main()
{
int i = 1;
i = (++i) + (++i) + (++i);//err,错误代码,不建议这样写
printf("%dn", i);
return 0;
}
总结
经过这么长时间的跨度,这个系列算是完结了,期间经历了期末考试、放假回家及多种不可控因素,操作符已经全部介绍完毕,因为作者本身也是小白,只能站在一个小白的视角来为有需要的人提供帮助,如果有错误还请大牛指出。
一句话总结操作符的使用:我们写出来的表达式如果不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是存在问题的,需要改正。
希望我的文章能够为大家再写代码时提供帮助!
希望各位大牛能够及时指出我文中存在的不足和错误,我好加以改正!
最后希望以后写的文章越来越好!
鸣谢
感谢比特科技鹏哥所传授的知识,让我受益匪浅,写出这篇文章!



