C语言——操作符详解(下)

一、赋值操作符

可以让你对于前不满意的值。也就是你可以给自己重新赋值。

int a=20;
a=10;
int weight = 120;//体重
weight = 89;//不满意就赋值

二、复合赋值符

+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^

这些复合赋值符可以写成复合的效果,例子如下:

int a=10;
a=a+10;
a+=10;

三、单目操作符

单目操作符介绍

符号含义
!逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
前置、后置–
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换

四、 关系操作符

>
>=
<
<=
!=   用于测试“不相等”
==      用于测试“相等”

五、逻辑操作符

&&     逻辑与
||     逻辑或

eg:应该注意逻辑操作符与按位操作符的区别
例1:

int main()
{
	int a = 3;
	int b = 2;
	printf("%d\n", a & b);
	printf("%d\n", a && b);
	return 0;
}

编译结果:
在这里插入图片描述
例2:

int main()
{
	int a = 3;
	int b = 2;
	printf("%d\n", a | b);
	printf("%d\n", a || b);
	return 0;
}

编译结果:
在这里插入图片描述
一道面试题:

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}

编译结果:
在这里插入图片描述
这是因为a的初始值为0,而++在后,a所以为先用后加,而逻辑操作符看到a为0后,便不执行之后的代码,所以b,c,d的值并没有发生改变。所以输出结果为上述表达式。
变式1:改变a的初始值为1;

#include <stdio.h>
int main()
{
    int i = 0,a=1,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}

编译结果:
在这里插入图片描述
当a的结果为1时,逻辑操作符看到a为真时,需要验证其他的表达式是否为真,所以会执行之后的代码,所以输出结果为上述表达式。

变式2:

#include <stdio.h>
int main()
{
    int i = 0,a=1,b=2,c =3,d=4;
    i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}

编译结果:
在这里插入图片描述
当a的初始值为1时,逻辑或只要有一个为真,其结果就为真,所以不会执行其他的代码,所以输出结果为上述表达式。
变式3:

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}

编译结果:
在这里插入图片描述
当a的初始值为0时,代码往后执行,执行到 ++b 时,式子结果为真,便不往后执行代码,所以输出结果为上述表达式。

六、条件操作符

exp1 ? exp2 : exp3

可以使用条件表达式实现找两个数中较大值。
如:

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	if (a > b)
		printf("%d\n", a);
	else
		printf("%d\n",b);
	printf("%d", (a > b) ? a : b);
	return 0;
}

在这里插入图片描述

七、逗号表达式

逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

例如:

int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
	printf("%d", c);
	return 0;
}

编译结果:
在这里插入图片描述

八、下标引用、函数调用和结构成员

8.1 [ ] 下标引用操作符

操作数:一个数组名 + 一个索引值


int main()
{
	int arr[5] = { 0,1,2,3,4 };
		printf("%d ", arr[2]);

	return 0;
}

编译结果:
在这里插入图片描述

8.2 ( ) 函数调用操作符

#include <stdio.h>
 void test1()
 {
 printf("hehe\n");
 }
 void test2(const char *str)
 {
 printf("%s\n", str);
 }
 int main()
 {
 test1();            //实用()作为函数调用操作符。
 test2("hello bit.");//实用()作为函数调用操作符。
 return 0;
 }

编译结果:
在这里插入图片描述

8.3访问一个结构的成员

struct Book
{
	char name[20];
	char author[30];
	int price;
};
int main()
{
	struct Book b1 = {"C语言", "小李", 66};
	struct Book b2 = { "C++", "小王", 88 };
	printf("《%s》 %s %d\n", b1.name, b1.author, b1.price);
	printf("《%s》 %s %d\n", b2.name, b2.author, b2.price);
	//结构体变量.成员名


	return 0;
}

编译结果:
在这里插入图片描述

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

{Hello World}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值