变量
- 常量:这个概念很好理解,就是这个量不会发生变化。比如,
数字5
,一个太阳,一个月亮
等,这些东西是一直不变的,就是常量。 - 变量: 这个玩意儿的概念刚好与常量相反,就是这个量是可以变化的,是可以随我们的意愿进行改变(前面,咱们也见过很多了),比如,
int a=0;
,char arr[];
,其中,a
和arr
都是变量,为了更好的描述咱们创建的变量(让编译器能够理解咱们创建 的变量),所以们要用到数据类型(前面讲过了数据类型的知识),变量的创建格式:
data_type name ;
| |
| |
数据类型 变量名字
比如:
int a =10; // int 数据类型,a变量名
- 变量创建的本质: 关于变量创建的本质,前面咱们有提到过——向内存申请空间(具体怎样申请,咱们后面会详解的)。具体申请多大的空间,由我们所创建的变量对应的类型决定(各个数据类型占有多大的空间,前面咱们都有讲过)。
- 全局变量和局部变量: 这俩玩意儿的概念,从表面就能看出个大概意思,全局和局部就是作用的范围不同。在
{}
外的变量就是全局变量,反之在{}
内的变量就是局部变量。比如,代码展示;
# include <stdio.h>
int a=10; //全局变量
int main()
{
int b=3; //局部变量
printf("%d %d",a,b); //对全局和局部变量进行打印
return 0;
}
运行结果图:
- 两者的作用范围不同: 全局变量作用的范围为整个程序,
无论是主函数内,还是子程序(子函数/代码块),都能使用
。局部变量只能在它所在的范围内使用,其它的程序不能调用。如图,代码展示;
# include <stdio.h>
int c=30;
int main() //{}内的就是局部变量
{
int a=10; //局部变量
{
int b=10; //是这个{}内的局部变量,所以只能被这个{}内调用,其它不能调用
} //所以 printf("%d ",b); 不会执行,编译器会报错
printf("%d %d\n",c,a);
printf("%d ",b);
return 0;
}
运行的结果图:
修改代码——改变b
的作用范围:如代码所示:
# include <stdio.h>
int c = 30;
int main() //{}内的就是局部变量
{
int a = 10; //局部变量
//{
// int b = 10; //是这个{}内的局部变量,所以只能被这个{}内调用,其它不能调用
//}
int b = 10; //修改b的作用范围,就可执行
printf("%d %d\n", c, a);
printf("%d ", b);
return 0;
}
运行结果图:
- 两者在内存中的存储位置不同: 内存被大致划分为三个区域,
栈区,堆区,静态区
。局部变量被存储在栈区,全局变量被存储在静态区,而对于堆区,存储的是malloc,calloc,realloc,free
函数。如图所示:
本章中,我们只是大概介绍,具体在内存中怎样存储的,我们以后会给大家详解的。
算术操作符:+,-,*,/,%
在计算机中我们不可避免的要进行计算,为了方便计算,这个时候就要用到操作符。具有计算能力的操作符只是操作符的一个子集。因为有的操作符不一定是用来计算的,比如,[]
,对于sizeof
,前面咱们已经讲过了,而[]
是数组里面的下标引用操作符(后面,咱们会详解的)。+ ,- ,* ,/ ,%
分别为加,减,乘,除,取余(取模)。
- 操作数:参与操作符计算的东西就叫操作数,比如:
int a=10;
int b=3;
char arr [10] ; //arr[0],操作数是0;
int c=a / b; //a和b就叫做操作数;
int d=a % b; //a和b叫做操作数;
sizeof(int); //int 也叫操作数;
...
- 单目和双目操作符:它们俩唯一的区别就是操作数的个数不同。单目:也就是只有一个操作数。双目:有俩操作数。我们上面讲的
int c = a / b;
就有俩操作数,所以/
是双目操作符。我们都知道,要想进行完整的加,减,乘,除,取余运算,肯定要俩数,一个数是根本无法进行完整的计算的,所以就叫做双目操作符。 - 除,取余着重介绍:
+ ,- ,*
这仨操作符没啥可讲的,没什么特别要注意的地方,就是常规操作。我们着重介绍/,%
这俩操作符。- 除(/):这个操作符叫 除,其实在C语言中,操作数的不同,计算结果的类 型是不同的,当两个操作数都是整数时候,叫取整操作符,计算的结果是整数那正好,如果计算的是小数,那就只取整数部分。比如,
进行代码展示:
- 除(/):这个操作符叫 除,其实在C语言中,操作数的不同,计算结果的类 型是不同的,当两个操作数都是整数时候,叫取整操作符,计算的结果是整数那正好,如果计算的是小数,那就只取整数部分。比如,
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10;
int b = 3;
int c = a / b;
printf("%d ", c);
return 0;
}
运行结果图:
当至少一个操作数是小数的时候,/
就执行小数运算,数据类型就要用浮点型‘,否则其它类型是无法识别的。在windows
系统中,默认小数点后六位。如图所示,
- 负数的
/
运算:当至少一个操作数为负数时,计算的结果就是负数。如代码所示;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int c = -6 / 2;
int b = 6 / -2;
int d = -6 /- 2;
printf("%d\n", c);
printf("%d\n", b);
printf("%d\n", d);
return 0;
}
运算结果,如图;
- 取余
%
运算符:也就是取余数,只有操作数都是整数才有取余运算,浮点 型没有取余运算。如代码所示;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int c = 6 % 4; //取6除以4的余数===2;
printf("%d", c);
return 0;
}
运行结果图;
- 取余
%
的正负:它运算的结果正负,由第一个操作数决定(第一个整数)。如代码所示;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int c = -6 % 4; //结果的正负由前面的整数决定
int d = 6 % -4;
printf("%d\n", c); //-2
printf("%d", d); //2
return 0;
}
运行结果图;
单目操作符:++,- -,+,-
咱们在上面已经讲过了什么是操作符,什么是操作数,是什么是单目,双目操作符(以及它俩的区别),+ ,-
这里不是加,减。而是正,负号的意思。我们主要讲一下,++.- -
这俩操作符。
- 前置
++
和后置++
: 前置++
的形式:++变量名。后置++的形式:变量名++。每执行一次++
后,就在原来的基础上加一,即a++
等价于a=a+1;
。如图,代码展示:
int a = 10;
a++ ; //a=a+1;
++a ; //a=a+1;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10;
int c = 4;
a++;
c = c + 1; //等价于c++;
printf("%d\n", a);
printf("%d\n", c);
return 0;
}
运行结果图:
- 前置和后置的区别:两者没有给其它变量赋值的时候(
a++ /++a
),它俩没有什么差别,就是普通的加一操作。一旦进行赋值的时候,它俩的差别就体现出来了。前置++,先自增1,后赋值。后置++,先赋值,后自增1。进行代码展示;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10;
int c = a++;
printf("%d\n", a); //后置++,先赋值,后自增1;a=11
printf("%d\n", c); //c=10;
return 0;
}
运行结果图:
赋值操作符:=和复合赋值
=
在数学中是等于的意思,但在C语言中=
是赋值的意思,C语言中使用==
表示等于。在运算优先级中(什么是优先级,咱们后面会详解的),它是最低级的。 进行代码展示:
int a=10; // 把10赋值给a;
复合赋值,这玩意儿,没啥可讲的。不建议大家进行复合赋值,因为代码的可读性很 差。代码展示;
int a=10;
int b=3;
int c=b=a; //复合赋值时,从又向左依次赋值。 c =10;
//代码的可读性很差。
强制类型转换
首先,不建议大家闲的没事就使用这个强制类型转换。什么是强制类型转换呢?比如,当我们写这样代码int a=3.45;
的时候,编译器肯定会报错,因为,我们赋予a的值与* 数据类型不符合*。这个时候,用强制类型转换就可解决这个问题,格式:(要转换的数据为类型)数据。俗话说的好,强扭的瓜不甜。
。是要付出一定代价的——数据丢失。当你的数据与数据类型不匹配的时候,它会按照数据类型进行转换。比如int a=(int)3.45;
,最后是a=3;
,很明显,发生了数据丢失。进行代码展示;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = (int)3.45;
printf("%d", a);
return 0;
}
运行结果图:
彩蛋放松时刻!!!
听会音乐放松一下吧!
https://www.bilibili.com/video/BV1aw4m1S7HW/?spm_id_from=333.337.search-card.all.click&vd_source=7d0d6d43e38f977d947fffdf92c1dfad
每日一句:'全力以赴的人,终会满载而归!'
.感谢你能看到这里,点赞+关注+收藏是对我最大的鼓励,咱们下期间!!!