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

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

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

相关推荐
danaaaa1 小时前
算法力扣刷题 三十六【二叉树迭代遍历】
数据结构·c++·算法·leetcode·职场和发展
王安安的记录1 小时前
DFS回溯剪枝|KMP通过数组记录减少判断子字符串|思路
算法·深度优先·剪枝
微笑小星1 小时前
C/C+++服务器之libuv的使用实战
服务器·c语言·c++
mana飞侠2 小时前
代码随想录算法训练营第67天:图论5[1]
算法·深度优先·图论
Mount〆2 小时前
王道考研数据机构:中缀表达式转为后缀表达式
数据结构·算法
阿拉-M832 小时前
代码随想录Day72(图论Part08)
算法·图论
只待花开2 小时前
QT5.12.9 通过MinGW64 / MinGW32 cmake编译Opencv4.5.1
开发语言·qt
阿拉-M832 小时前
代码随想录Day71(图论Part07)
算法·图论
我写代码菜如坤2 小时前
C#中Stopwatch的使用
开发语言·c#
wjs20243 小时前
SQLite Glob 子句
开发语言