目录
一、变量的知识点整理
在上一篇博客中,我简单介绍了变量的知识点,即当全局变量与局部变量同名时,局部变量优先,本篇将继续介绍变量的其他知识点,仅供参考。
1、变量的创建
了解过类型之后,我们不禁要问,使用类型要做什么呢?数据是用来创建变量的。何为变量?在C语言中,我们把经常变化的值称为变量,不变的量称为常量。
下面我简单展示一下变量创建的语法形式——
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量
变量在创建的时候给定⼀个初始值,就叫初始化 ,在此不作展示。
2、变量的分类
变量分为全局变量和局部变量,简单来说,在大括号外部定义的变量就是全局变量,相反,在大括号内部定义的变量就是局部变量,举个例子——
#include <stdio.h>
int global = 2023;//全局变量
int main()
{
int local = 2018;//局部变量
printf("%d\n", local);
printf("%d\n", global);
return 0;
}
局部变量和全局变量之间同名的情况如何处理我在上一篇blog中已经作了说明和演示,在此不多赘言,感兴趣的朋友可以去看一下我的上一篇blog——《C语言常见概念、数据类型以及变量的一些重要知识点总结》 。
3、全局变量和局部变量在内存中的存储位置
在学习C/C++语言的时候,我们会关注到内存中的三个区域:栈区、堆区、静态区,局部变量就放在内存的栈区,而全局变量是放在内存的静态区,堆区是用来动态内存管理的,堆区我们后期会讲,变量板块这里我们简单了解一下栈区和静态区就可以了。这里放一张比较粗略的内存区域划分图——
实际上内存区域的划分会更加细致,以后写到操作系统相关知识的时候会进一步介绍。
二、算术操作符一些知识点的总结
首先要声明的一点是,操作符就是运算符,只是翻译不同,意思一样。
接下来我们简单介绍一下什么是算术操作符,我们在写代码时,必然会涉及到计算,C语言中为了方便计算,提供了一系列操作符,其中有一组操作符叫算术操作符,分别是: +、 - 、* 、/ 、% ,这些操作符都是双目操作符。
1、首先我们来介绍 + 和 -
(1)+ 和 - 用来完成加法和减法。
(2)+和 - 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双目操作符。接下来是代码展示——
#include <stdio.h>
int main()
{
int x = 4 + 22;
int y = 61 - 23;
printf("%d\n", x);
printf("%d\n", y);
return 0;
}
2、接下来介绍 *
运算符 * 用来完成乘法。代码展示——
#include <stdio.h>
int main()
{
int num = 5;
printf("%d\n", num * num); // 输出 25
return 0;
}
3、/
运算符 / 用来完成除法。除号的两端如果是整数,执行的是整数除法,得到的结果也是整数。代码示例展示——
#include <stdio.h>
int main()
{
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n", x); // 输出 1.000000
printf("%d\n", y); // 输出 1
return 0;
}
尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,而不是1.5 。原因就在于C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。
如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时C语言就会进行浮点数除法。
在以下给出的示例中, 6.0 / 4 表示进行浮点数除法,得到的结果就是 1.5 。
#include <stdio.h>
int main()
{
float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.500000
return 0;
}
4、%
运算符 % 表示求模(余)运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能于用浮点数。如果要进行负数求模,要注意结果的正负号由第⼀个运算数的正负号决定。示例如下——
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
如图所示,第⼀个运算数的正负号( 11 或 -11 )决定了结果的正负号。
三、赋值操作符:=和复合赋值
赋值的定义:在变量创建的时候给⼀个初始值叫初始化,在变量创建好后再给⼀个值,就叫赋值。
赋值操作符 = 是⼀个随时可以给变量赋值的操作符。
1、连续赋值
赋值操作符可以连续赋值,C语言虽然支持这样连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节——
int a = 2;
int b = 4;
int c = 1;
b = a+2;
c = b;
这样写,在调试的是,每⼀次赋值的细节都是可以很方便的观察的。这样看可能还不太明显,故我们和没拆分之前作一个对比——
int a = 2;
int b = 4;
int c = 1;
c = b = a+2;//连续赋值,从右向左依次赋值的
这样一对比,是不是前一种拆分后的写法看起来更加简洁明了呢。
2、复合赋值符
在写代码时,我们经常可能对⼀个数进行自增、自减的操作,如下图代码所示——
int a = 8;
a = a+3;
a = a-1;
其实C语言给出了更加方便的写法,如下图代码所示——
int a = 8;
a += 3;
a -= 1;
C语言中给我们提供了复合赋值符,方便编写代码,这些赋值符有:
四、单目操作符
之前介绍了双目操作符,有两个操作数,而单目操作符只有一个操作数,即++、--、+(正)、-(负)。
1、++是⼀种自增的操作符,又分为前置++和后置++,- -是⼀种自减的操作符,也分为前置- -和后置- -。
2、这里的+和 - 要和之前介绍双目操作符时的作区分,此处的+是正号、- 是负号,都是单目操作符。运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。运算符 - 用来改变⼀个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负
数。
注:++和 - -的前置和后置问题,我们之后也会介绍,这里仅作帮助记忆,记忆方法如下——
符号在前,先+1(或 - 1),再使用;
符号在后,先使用,再+1(或 - 1)。
五、强制类型转换
在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,诸如——
(类型)
以2.34为例,代码如下——
int a = 2.34;
//a的是int类型, 2.34是double类型,两边类型不同,编译器会报警告
那么,如何消除这个警告?我们可以使用强制类型转换——
我们使用强制类型转换都是在万不得已的时候使用,如果不需要强制类型转化就能实现代码,当然再好不过。老话说得好:“强扭的瓜不甜”嘛。