变量的基本介绍
1、变量名的命名规则
-
变量名只能是由字母数字下划线组成,并且中间不能包含空格。
-
变量名的首字母必须为字母或者下划线,不能为数字。
-
变量名不能使用关键字作为变量名。
2、变量的分类
8.2.1、根据单个变量的空间长短可分为:
a)字符型变量(1个字节):char类型、unsigned char类型
b)短型变量(2个字节):short类型、unsigned short类型;
c)长型变量(4个字节):int、unsigned int(或long、unsigned long)或float类型以及指针变量等;
d)超长型变量( 8个字节):double类型、__int64或long long
等。(有些编译器不支持__int64
类型,有些编译器不支持long long)
8.2.2、根据类型可以分为:
a)整数型变量:包括char、 unsigned char、short、 unsigned short、int、 unsigned int(或long、unsigned long )以及 __int64
或long long等。
b)浮点数型变量:float类型(单精度)、double类型(双精度);
c)其他变量类型:数组变量、指针变量以及结构体对象等。
3、基础数据类型
3.1、基础数据类型—整型
1.整型根据有无符号分为:有符号,无符号;
2.整型根据字节长短分为:整型,长整型,短整型。int 4;short int 2(可简写为short);
八字节整型变量
整型变量中还包括8字节(64位)整型变量,是不常用的变量类型。
例如:_int64或long long(有些编译器中不支持__int64,有些编译器不支持long long)。
printf函数输出64位数的语法,在window下和linux下是不一样的。
windows下是大写I再加64d
或64u
:
printf("%I64d/n",a);
printf("%I64u/n",a);
linux下是两个小写l在d或u
printf("%lld/n",a);
printf("%llu/n",a);
3.2、基础数据类型—浮点型
1.单精度,双精度,长双精度。
2.单精度:32位float;双精度64位double;长双精度128 long double。
=浮点型变量
浮点型变量就是用于存储带有小数的数据的变量,分为单精度(float)与双高精度(double)两种类型。一般浮点型变量不与unsigned关键字连用,缺省是有符号变量。
浮点型变量的存储结构比较复杂,本节主要讨论float和double类型的存储范围。
Float类型的指数位有8位:
1bit (符号位) | 8bits (指数位) | 23bits (尾数位) |
---|---|---|
而double类型的指数位有11位
1bit (符号位) | 11bits (指数位) | 52bits (尾数位) |
---|---|---|
float类型是4个字节(32)位变量,总共有6到7位的有效精度。(2^23 = 8388608)
double 类型是8个字节(64)位变量,总共有15-16位的有效精度。(2^52 = 4503599627370496)
float的指数范围为-127~ 128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
3.3、基础数据类型—字符型
1.Char 数据用单引号包围,占用一个字节,8位,取值范围,-128~127。
2.Wchar_t 数据用单引号包围,占用两个字节,16位或者32位。
3.4、基础数据类型—布尔型
bool本质为条件判断,只有两种情况0或1。
3.5、基础数据类型—派生型
1.指针,枚举,数组,结构体,共同体,类类型。结构体与共同体的区别:
2.结构体(structure)是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型,而且每个成员的数据类型可以相同也可以不相同。共同体(union)将几种不同的变量储存在同一内存单元中,也就是使用覆盖技术,几个变量互相覆盖,这种几个不同的变量共同占用一段内存的结构,可见二者最大的区别就是所占用的内存,结构体(structure)所占用的内存是分量内存之和,共同体(union)所占用的内存是等于最大的分量的内存。
4、变量的使用
#include<stdio.h>
int main() {
//2个整数的相加
int num1 = 1;
int num2 = 10;
scanf_s("%d%d",&num1,&num2);
printf("%d",num1+num2);
return 0;
}
5、变量的作用域
#include<stdio.h>
int g = 100;
int main() {
int a = 10;
{
int b = 20;
printf("%d\n", b);
printf("l:%d\n", a);
printf("g:%d\n",g);
}
//printf("%d\n",b);未定义b
printf("2:%d\n",a);
printf("g:%d\n",g);
return 0;
}
6、局部变量的作用域
变量所在的局部范围
全局变量的作用域
整个工程
7、生命周期
局部变量:进入局部变量所在的范围,生命周期开始,出局部变量所在的范围的时候,生命周期结束
全局变量: 进入整个程序的生命周期