.
一、变量概念
- C语言变量,是指内存空间中的一段内存区域,可以用于存放和读取一定大小的数据。
- 每个变量都在内存中有一个独立的地址,在变量有效期内变量的地址一直保持不变。
1、变量命名规则
- 编译器对变量的命名是有一定要求的,如果不符合变量命名规则会编译时就会出错
- a)变量名只能是字母(a-z A-Z),数字(0-9)与下划线(_)的组合,并且之间不能包含空格;
- b)变量名首字母必须为字母(a-z A-Z)或者下划线(_),数字不能放在变量名首位;
- c)变量名不能使用关键字做变量名,比如:for、while、case、break等关键字等。
2、匈牙利命名法
- 该命名法是在每个变量名的前面加上若干表示数据类型的字符
- 基本原则是:变量名=属性+类型+对象描述
- 例如:int m_nAge;
- m_代表成员变量,g_代表全局变量
- n代表该变量是一个整型变量,Age代表这个变量是用来记录年龄的
二、变量分类
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)
2、根据类型分类
- a)整数型变量:包括char、 unsigned char、short、 unsigned short、int、 unsigned int(或long、unsigned long )以及 __int64或long long等。
- b)浮点数型变量:float类型(单精度)、double类型(双精度);
- c)其他变量类型:数组变量、指针变量以及结构体对象等。
三、变量的存储原理
- 1个十六进制数可以用4个二进制数表示,也就是4 bit
- 1字节=8bit,也就是说一个字节可以使用2个十六进制数来表示
- 在VS的内存区域中也是如此显示的,包括很多的工具如OD、CE等也是如此
边界值计算规律:
16,16*16=256,256*256=65536,65536*65536=42.9亿,4G*4G=1.84e+19
1、单字节(8位)变量
- 对于unsigned char类型变量
- 毫无疑问只要在8个位不同的位置上存储1或0,就能得到0-255之间256种组合后的数字
- 对于char来说,一半是正数一半是负数
- 计算机将char类型变量中的最高位作为符号位,最高位为0的是正数,最高位为1是负数
- 最高位是0时最大的数字就是0x7F,转成二进制就是0 111 1111(0-127)
- 最高位是1时最大的数字就是0xFF,转成二进制就是1 111 1111(-128-0)
char c1 = 0xFF;
unsigned char c2 = 0xFF;
2、双字节(16位)变量
- 双字节变量也叫16位变量,包括unsigned short和short两种类型,都属于整型变量。
- 双字节变量与上一节的单字节变量,在存储原理上基本一致,只是存储空间整整大了一倍。
3、四字节(32位)整型变量
- 四字节整型变量也叫32位变量,包括unsigned int和int(或unsigned long和long)等类型。
- 四字节变量与单字节和双字节变量,在存储原理上基本一致,只是存储空间更大了。
- unsigned int:无符号四字节变量,存储范围是0-4294967295(0xFFFFFFFF) ,就像十进制中的8位数是从0到99999999总共100000000个那样。
- int:有符号四字节变量,存储范围是-2147483648(0x80000000)到0到2147483647(0x7FFFFFFF)之间的数,其中0x80000000是正负数的分界点。
4、八字节整型变量
- 整型变量中还包括8字节(64位)整型变量,是不常用的变量类型。
- 例如:__int64或long long(有些编译器中不支持__int64,有些编译器不支持long long)。
int main()
{
long long i = 0x80000000;
unsigned long long u = 0xFFFFFFFF;
printf("i=%I64d,u=%I64u\n", i * 5000, u * u);
return 0;
}
四、浮点型变量
- 浮点型变量就是用于存储带有小数的数据的变量,分为单精度(float)与双高精度(double)两种类型
- 一般浮点型变量不与unsigned关键字连用,缺省是有符号变量
#include <stdio.h>
int main()
{
char ch = 99;
int n = 1234567890;
float f = 12345678.123456789f;//0.123456f
double d = 1234567890.1234567890;
//0.01234567890123456789;//1234567890123456.0;
printf("c=%c,n=%d,f=%f,d=%0.20lf\n",ch+5,n,f,d);
printf("sizeof(ch)=%d, sizeof(n)=%d, sizeof(f)=%d, sizeof(d)=%d\n",
sizeof(ch), sizeof(n), sizeof(f), sizeof(d));
//最后一行是打印所有类型变量的大小(字节数)
return 0;
}