前言
C语言中,操作符主要分为以下几类:
1.算术操作符
2.移位操作符
3.位操作符
4.赋值操作符
5.单目操作符
6.关系操作符
7.逻辑操作符
8.条件操作符
9.逗号表达式
10.下标引用、函数调用和结构成员
下面,让我们逐一探究。
五、单目操作符
何为单目操作符?顾名思义,就是使用时只需要一个变量就可以实现的操作符(操作数为1),而不是像+ - * /这种运算操作一样必须要有两个数才能实现运算。那么单目操作符有哪些呢?
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
-
!:逻辑反操作表示可以得到一个与操作数逻辑上相反的数。比如
int a = 10; int b = !a;
那么b的结果就是0,因为a为真,!a为假。 -
‘-’操作符就是取一个数的负数,‘+’就是取正数,一般省略+
-
~:按位取反操作符。例如
int a = -1;int b = ~a;
则b的结果为0。因为-1在计算机中的存放形式为111111,按位取反后为00000,正是0在计算机中存储的二进制。 -
sizeof是一个用来计算变量、类型等所占内存大小的操作符,其单位为字节。需要注意的是,既然sizeof是一个操作符,那么对于以下形式也是正确的:
sizeof a
,就是说sizeof在获取一个变量的内存大小时可以不用加括号,但保险起见,还是加上吧。
另需注意的是,sizeof表达式中的语句是不参与实际运算的。例如:
short s = 1;
int a = 2;
int c = sizeof(s = a + 2);
c的结果为2,而程序运行后,s的值仍为1。因为其中的语句不参与运行,所以s的类型就没有改变,还是short型,因此sizeof结果为2,那么s的值也没有发生变化。
此外,sizeof还可以用来计算一个数组的元素个数。用数组的总大小除以数组内一个元素的大小就可以得出数组内元素的个数。例如:
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int len = sizeof(arr)/sizeof(arr[0]);
其中len就是数组内元素的个数。但是这种方式仅能在定义数组的那个函数中使用,而不可以传参计算数组大小。因为数组传参时,传过去的是地址,即使在接收参数的函数形参中定义的是数组,其本质依然是地址,所以那样用sizeof算出来的是一个地址的内存大小。比如:
#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