前言
在C/C++中有许多拥有各种功能的操作符,用来实现我们需求,比如最常用的 = 就是操作符之一,又比如数***算中常见的+、-、* 和 / ,本文旨在通过各种详细的例子来介绍这些操作符,让你与它们之间不再陌生,本文承接上文,继续介绍操作符
分类
算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构体成员。
注意:
*本文继续介绍接下来的几个操作符,如果想看其他内容还得等一等下篇文章的发布。
文中图片上的代码所引用的头文件#include
正文
单目操作符
单目操作符中的 & 与 *
单目操作符中的 & 与 *
&是取地址的意思,与按位与一模一样,不过按位与需要两个操作数,取地址符&只需要一个操作数,*是解引用操作符,出现于指针中,常常与取地址符搭配使用
//取地址操作符与解引用操作符
int main()
{
| 1 2 3 4 5 6 7 8 | int a = 0; printf("%pn", &a); int* pa = &a; *pa = 10; //pa就是a的地址,*pa就是通过地址找到a printf("%dn", a); printf("%p", pa); return 0; |
}
单目操作符中的强制类型转换
强制类型转换,顾名思义,就是将一种类型强制转换为另一种类型,如float型转换为int型
//强制类型转换
int main()
{
| 1 2 3 | int a = (int)3.14; printf("a =%dn", a); return 0; |
}//将3.14强制转换为int型赋给a
单目操作符中sizeof与数组传递的关系
sizeof是计算大小的一个操作符,如sizof(int)为4字节
//sizeof与数组传递
void test1(int arr[10])
{
| 1 | printf("test1 arr =%dn", sizeof(arr)); |
}
void test2(char ch[10])
{
| 1 | printf("test2 ch =%dn", sizeof(ch)); |
}
int main()
{
| 1 2 3 4 5 6 7 | int arr[10] = { 0 }; char ch[10] = { 0 }; printf("arr =%dn", sizeof(arr));//4*10=40 printf("ch =%dn", sizeof(ch));//1*10=10 test1(arr); test2(ch); return 0; |
}//当数组作为实参传递到函数中作形参时, //只传递首地址,也就是指针大小
关系操作符
关系操作符中的 > <
就是数学中的大于和小于
//关系操作符 > <
int main()
{
| 1 2 3 4 5 6 7 | int a = 1; int b = 0; if (a > b) printf("Yesn"); else if (a < b) printf("Non"); return 0; |
}
关系操作符 >= <=
同大于小于逻辑一样,不过是加上了一个等于
//关系操作符 >= <=
int main()
{
| 1 2 3 4 5 6 7 8 | int a = 1; int b = 2; int c = 2; if (a >= b) printf("Yesn"); else if (b <= c) printf("Yes(2)n"); return 0; |
}
关系操作符 != ==
不等于与等于,常常用于判断
//关系操作符 != ==
int main()
{
| 1 2 3 4 5 6 7 8 | int a = 1; int b = 2; int c = 2; if (a != b) printf("Yesn"); if (b == c) printf("Yes(2)n"); return 0; |
}//特别注意区分 == 和 = 的区别
逻辑操作符
逻辑与 &&
与,就是并且的意思,程序中表示一端有假就全为假,即一假则假
//逻辑操作符 &&
int main()
{
| 1 2 3 4 5 6 7 | int a = 1; int b = 0; if (a && b) printf("Yesn"); else printf("Non"); return 0; |
}//一假则假
逻辑或 ||
或,就是或者的意思,比如在吃荆州面馆或吃河南烩面,二选一,不过在程序中表示一真则真
//逻辑操作符 ||
int main()
{
| 1 2 3 4 5 6 7 | int a = 1; int b = 0; if (a || b) printf("Yesn"); else printf("Non"); return 0; |
}//一真则真
360面试笔试题
主要是考验逻辑操作符的使用
//360面试笔试题
int main()
{
| 1 2 3 4 5 | int a = 0, b = 1, c = 2, d = 4; //int i = a++ && ++b && c++ && ++d;//1,1,2,4 int j = a++ || ++b || c++ || ++d;//1,2,2,4 printf("a =%dnb =%dnc =%dnd =%dnn", a, b, c, d); return 0; |
}
条件操作符(三目操作符)
三目就是有三个操作数的意思,形式为 exp1 ? exp2 : exp3 ;
//条件操作符(三目操作符)
int main()
{
| 1 2 3 4 5 | int a = 1; int b = 0; int c = (a > b ? a : b); printf("%dn", c); return 0; |
}//相当于简化if else语句
逗号表达式
逗号表达式就是一堆表达式子加上一堆逗号,就是 exp1,exp2,exp3,..expN;
//逗号表达式
int main()
{
| 1 2 3 4 5 | int a = 1; int b = 0; int c = (a++, b += a, ++b); printf("%dn", c); return 0; |
}//从左向右计算,最终取最右端计算值
就像三目操作符可以简化 if 双分支语句一样,逗号表达式也可以简化while语句
//利用逗号表达式简化while语句
int main()
{
| 1 2 3 4 5 6 7 8 | int a = 1; int b = 0; while (b += a,a++,a < 5) { } printf("%d %dn", a, b); return 0; |
}
总结
本文详细介绍了几个操作符,但还没介绍完,还有几个留着下次详细讲,这篇中可能看着要比上舒服些,没有显得很冗长,代码显示效果也都还不错,因为上次是在CSDN上写的,玩不太明白,所以还是老老实实在牛客网上先发布后再复制粘贴到CSDN吧!上次的搬家都还没搬过来!所以我会在文章末尾附上标识符详解(上)的链接,希望小伙伴们多多支持,我尽快把上搬过来。
希望我的文章能够为大家再写代码时提供帮助!
希望各位大牛能够及时指出我文中存在的不足和错误,我好加以改正!
最后希望以后写的文章越来越好!
鸣谢
感谢比特科技鹏哥所传授的知识,让我受益匪浅,写出这篇文章!
CSDN-C/C++中的操作符详解(上)——初学者必备



