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

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

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

相关推荐
ULTRA??4 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
远望清一色20 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself30 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj41 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家1 小时前
go语言中package详解
开发语言·golang·xcode
llllinuuu1 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s1 小时前
Golang--协程和管道
开发语言·后端·golang
王大锤43911 小时前
golang通用后台管理系统07(后台与若依前端对接)
开发语言·前端·golang