今天我们主要来学习C语言都有哪些操作符哦,同学们有没有复习上篇文章的内容呢,记得每次学习新知识之前一定要复习哟!

文章目录

  • 一、操作符
      • 算数操作符(也是双目操作符)
      • 移位操作符
      • 位操作符
      • 赋值操作符
        • =:
        • +=:
      • 单目操作符
        • sizeof
        • ++和--
        • (类型)
      • 关系操作符
        • =和==
      • 逻辑操作符
      • 条件操作符
      • 逗号表达式
      • 下标引用、函数调用和结构成员
        • [ ]:
        • ():
  • 二、关键字
      • 补充
        • 变量的命名
  • 总结


一、操作符

这里我们以介绍为主,点到为止,让大家能对有个认识、初步看得懂代码,培养大家的兴趣,之后会再详细讲解。
注:多少目就代表有多少操作数或表达式

算数操作符(也是双目操作符)

  + - * / %

% 这个符号是进行取余数的操作,也叫做
加、减、乘不用多说,我们来看下使用 / 和 %要注意什么。

int main()
{
    int a = 7 / 2;
    int b = 7 % 2;//取模  两端只能是整型
    int c = 7 % 2.0;//error
    printf("%d\n", a);
    printf("%d\n", b);
    // / 除号的两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法
    return 0;
}


移位操作符

>> <<

位操作符

& ^ |

赋值操作符

=   +=    -=    *=   /=   &=   ^=    |=    >>=   <<=

上面有关于的,是对二进制数而言,以后会细讲

=:

将一个数或变量赋值给一个变量,它是针对单个的数和单个的变量的,这也就是为什么我们上节课说不能直接把一个数组赋值给另外一个数组

+=:

像a+=1,其实就是a=a+1的简写

int main()
{
    int a = 1;
    a += 1;
    printf("%d", a);
    return 0;
}

int main()
{
    int a = 1;
    //a += 1;
    a = a + 1;
    printf("%d", a);
    return 0;
}


后面除了移位和位的赋值,其它的相信大家一定马上就明白啦.

单目操作符

!           逻辑反操作(使与原来相反)
-           负值
+           正值(负号会使正数变为负数 但在负数前放加号并不会使负数变为正数)
&           取地址(涉及指针,之后会详细解释,其实也就是字面意思,把变量的地址取出来,还记得之前要大家从内存的角度看代码吗)
sizeof      操作数的类型长度(以字节为单位)求数组元素个数
~           对一个数的二进制按位取反(后面详细讲解)
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符) 
(类型)       强制类型转换

sizeof

sizeof是一个求数据元素内存大小的操作符,单位是字节。
很多同学会认为sizeof是一个函数,但现在它却出现在了操作符这里,为什呢?
我们现在看这段代码

#include<stdio.h>
int main()
{
    int a = 1;
    printf("%d\n",sizeof(int));
    printf("%d\n",sizeof a);//从这里就可以看出 sizeof的使用对变量来说是不需要,而如果是函数不管是变量还是数据类型都必须加括号
    return 0;
}

虽然变量的括号可省但数据类型的括号不能省。
根据sizeof的性质,我们经常会用sizeof来求数组元素的个数。

#include<stdio.h>
int main()
{
    //假如我们一开始初始化数组是没有确定数组中元素的个数,那么用下面的方法就可以很好的解决
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    printf("%d\n",sizeof (arr)/sizeof(int ));// 也可以printf("%d\n",sizeof arr/sizeof(int ));
    
    return 0;
}

++和–

    int a = 10;
    int b = a++;//后置++,先使用,后++
   相当于 int b = a; a=a+1;

    int b = ++a;//前置++,前++,后使用
   相当于 a=a+1;b=a;

大家看看下面这段代码会输出什么

     int a = 10;
    int b = a--;
    printf("%d\n", b);
    printf("%d\n", a);
    

(类型)

顾名思义,将一个元素强制转换成我们需要的类型

	//将double强制转换为int
    int a = (int)3.14;
    int a = int(3.14);//err这种写法是错误的()中是类型,是单目操作符
    printf("%d\n", a);//输出3
    3.14 字面浮点数,编译器默认理解为double类型

关系操作符

>
>=
<
<=
!=      用于判断“不相等”
==      用于判断“相等”

=和==

这里千万要注意,也是初学者最容易犯错的一个地方
判断相等是用连续两个等号 == 而不是孤零零一个 =
因为=是我们上面说的赋值操作符哦,而C语言也是为了区分才有了==

int main()
{
    int a = 10;
    if (a == 3)//这是判断a是否等于3,结果为假,所以不会打印haha
    {
        printf("haha\n");
    }
    if(a=3)//这里只有一个=号,进行赋值操作,括号内结果就是3,非0为真,便会打印haha
    {
    	printf("haha\n");
    }
    return 0;
}

逻辑操作符

&&     逻辑与(并且)
||     逻辑或(或者)

逻辑与和逻辑或大家数学上都学过,就不过多赘述啦。

条件操作符

exp1 ? exp2 : exp3

这里可以看成是一个简洁的if语句
若exp1为真,则执行exp2,若exp1为假则执行exp3。

    int a = 10;
    int b = 20;
    int r = (a > b ? a : b);//r=b

逗号表达式

exp1, exp2, exp3, …expN
int main()
{
    int a = 10;
    int b = 20;
    int c = 0;
    //       c=8    a=28   5
    int d = (c=a-2, a=b+c, c-3);//从左向右依次计算,最后结果位最右边的值
    printf("%d\n", d);

    return 0;
}

下标引用、函数调用和结构成员

[]  ()   .    ->

[ ]:

int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int n = 3;
    arr[n] = 20;//[]就是下标引用操作符  arr和3就是[]的操作数

    //a+b 
    return 0;
}

这里有几点不知道大家发现没有呢?
之前我们说过定义数组的时候说[ ]内不能是变量,但在这里我们看到,在使用[ ]下标引用是可以是变量,也就是说在访问数组元素时可以[ ]内可以是变量。
另外,既然arr和3是[ ]的两个操作数,对于“a+b”这个表达式来说,a和b是+号的操作数,我们都知道“a+b”和“b+a”其实是一样的,那么对于[ ]来说,arr和3又是不是也能互换呢?

我们一起来试试就知道了啦!

int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int n = 3;
    printf("%d",n[arr]);
    return 0;
}


哈!和我们想的一样嘛,这也是学C语言的魅力所在,当自己不确定的时候,第一时间想到的是自己去验证。

():

还记得我们之前的文章中写的add函数吗?

int Add(int x, int y)
{
	return x+y;
}

int main()
{
    int sum = Add(2, 3);//()就是函数调用操作符,Add,2,3都是()的操作数

    return 0;
}

我们上面说过,sizeof是操作符而不是函数,是因为在一些情况下()可以去掉,而函数无论如何也不能去掉()。

二、关键字

auto  break   case  char  const   continue  default  do   double else  enum   
extern float  for   goto  if   int   long  register    return   short  signed
sizeof   static struct  switch  typedef union  unsigned   void  volatile  while

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。

循环        分支语句			数据类型				内存
for			switch				char			register//寄存器
while		if else				short			static//静态的
do while	case				int
break		default				long
continue	goto				float
								double
								signed//有符号的
								unsigned//无符号的
								enum//枚举
								struct//结构体
								union//联合体(共用体)
								sizeof()计算大小
								typedef//类型重命名
								void//无(函数的返回值、函数参数)

break是跳出循环,continue是跳出此次循环,都是针对循环而言,但循环中如果有switch,break只跳出switch分支,而如果continue在swtich中会跳过循环后的语句,而不是仅仅跳过switch。
像下面这段代码会死循环的打印1。

int main()
{
	int choose = 1;
	while (choose)
	{
		switch (choose)
		{
		case 1:
			printf("%d\n", choose);
			continue;
		case 2:
			printf("%d\n", choose);	 
		}
		scanf("%d", &choose);
	}
	return 0;

register:将数据元素储存在寄存器上
static:将数据元素储存在静态区上

const//常属性
extern//声明外部符号

今天第一次出现的关键字,以后会慢慢讲,这里主要是想让大家认识和了解,先让大家有一个框架,这也和我们初期的文章目的是共通的。
注:定义变量名时不要使用关键字。

补充

变量的命名

1.有意义
int age;
double salary;
2.名字必须是字母、数字、下划线组成,不能有特殊字符,同时不能以数字开头。
int 3d;//error
int _3d;//ok
3.变量名不能是关键字。

总结

今天我们主要学习了操作符和关键字的意义和用法,需要注意的是
/和%的用法,sizeof是操作符及在求数组元素个数时的用法,=和==的区别,
++和–的前、后置用法,逗号表达式,下标引用操作数互换。

今天更多时理解和记忆,希望大家能多多回顾哟!

码字不易,完全用爱发电,觉得有帮助的点个赞和关注哦!欢迎留言!

更多推荐

【带你手把手零基础学C语言】(三)