操作符(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 复制代码
>
>=
<
<=
!=      用于测试"不相等"
==      用于测试"相等"

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

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

相关推荐
点心的游戏开发世界29 分钟前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
phltxy38 分钟前
C语言操作符详解
java·c语言·算法
RuoZoe1 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
aqiu1111111 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
辰烨chenye2 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
事圆则缓2 小时前
Kotlin 协程完全指南
开发语言·kotlin
罗西的思考2 小时前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
我爱写代码i3 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路3 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式