操作符(C语言)—第二期

赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

c 复制代码
int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000.0;//使用赋值操作符赋值。

赋值操作符可以连续使用,比如:
    
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值

这样的代码感觉怎么样?
那同样的语义,你看看:
    
x = y+1;
a = x;

这样的写法是不是更加清晰爽朗而且易于调试。

复合赋值符

+=

-=

*=

/=

%=

'>>=

<<=

&=

|=

^=

这些运算符都可以写成复合的效果。

比如:

c 复制代码
int x = 10;
x = x+10;
x += 10;
//复合赋值
//其他运算符一样的道理。这样写更加简洁。

单目操作符

c 复制代码
!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符)
(类型)       强制类型转换
c 复制代码
int main()
{
   int a = -10;
   int* p = NULL;
   printf("%d\n", !2);
   printf("%d\n", !0);
   a = -a;
   p = &a;
   printf("%d\n", sizeof(a));
   printf("%d\n", sizeof(int));


   printf("%d\n", sizeof a);//这样写行不行?
   //可以的,计算变量大小可以省略圆括号

   //printf("%d\n", sizeof int);//这样写行不行?
   //是错误的


   return 0;
}

关于sizeof其实我们之前已经见过了,可以求变量(类型)所占空间的大小。

sizeof 和 数组

c 复制代码
#include <stdio.h>

void test1(int arr[])
{
	printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{
	printf("%d\n", sizeof(ch));//(4)
}
int main()
{
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr));//(1)
	printf("%d\n", sizeof(ch));//(3)
	test1(arr);
	test2(ch);
	return 0;
}

问:
(1)、(2)两个地方分别输出多少?
(3)、(4)两个地方分别输出多少?
c 复制代码
(1)输出:40
    因为int 类型的数组 arr 中有 10 个元素,每个元素占用 4 个字节,所以总共占用 10 * 4 = 40 字节。
    
(2)输出:8
    虽然在 test1 函数中形参是 int arr[],但是在函数内部,数组名被当作指针处理,所以 sizeof(arr) 实际上是指针的大小,即 8 字节。
    
(3)输出:10
    因为char 类型的数组 ch 中有 10 个元素,每个元素占用 1 个字节,所以总共占用 10 字节。
    
(4)输出:8
    与(2)相同的原因,char 数组在函数内部也被当作指针处理,所以 sizeof(ch) 是指针的大小,即 8 字节。

关系操作符

c 复制代码
>
>=
<
<=
!=      用于测试"不相等"
==      用于测试"相等"

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。

警告: 在编程的过程中== 和=不小心写错,导致的错误。

相关推荐
2601_958352901 分钟前
还要写 AEC 算法?0 代码 + 6 个引脚,F-18 让通话清晰度提升 300%
人工智能·算法·降噪消回音
happyprince3 分钟前
03-regmix-深刻观-哲学与升华
算法
一路向阳~负责的男人4 分钟前
运动控制算法收录
算法
czt_java5 分钟前
5个核心位运算公式
算法
名字还没想好☜10 分钟前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
Doubbbbbbble云33 分钟前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
小溪学编程36 分钟前
AQS 原理详解:从 CLH 队列到 ReentrantLock 的实现
java·开发语言
David猪大卫37 分钟前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
持敬chijing39 分钟前
Web前后端开发-JavaScript 入门教程
开发语言·前端·javascript
2601_966949651 小时前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash