C语言之旅2-----(本章内容很丰富!!!)--数据类型和变量【2】

4 篇文章 0 订阅
4 篇文章 0 订阅

变量

  • 常量:这个概念很好理解,就是这个量不会发生变化。比如,数字5,一个太阳,一个月亮等,这些东西是一直不变的,就是常量
  • 变量: 这个玩意儿的概念刚好与常量相反,就是这个量是可以变化的,是可以随我们的意愿进行改变(前面,咱们也见过很多了),比如,int a=0;,char arr[];,其中,aarr都是变量,为了更好的描述咱们创建的变量(让编译器能够理解咱们创建 的变量),所以们要用到数据类型(前面讲过了数据类型的知识),变量的创建格式:
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语言中,操作数的不同,计算结果的类 型是不同的,当两个操作数都是整数时候,叫取整操作符,计算的结果是整数那正好,如果计算的是小数,那就只取整数部分。比如,
      进行代码展示:
#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在这里插入图片描述
每日一句'全力以赴的人,终会满载而归!'.感谢你能看到这里,点赞+关注+收藏是对我最大的鼓励,咱们下期间!!!

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值