C++变量的定义(非常详细,附带实例)
变量是指在程序运行期间其值可以发生改变的量。
C++ 程序中,每个变量都必须有一个名称作为唯一的标识,且具有一个特定的数据类型。变量使用之前,一定要先进行声明或定义。
变量声明的一般形式如下:
多个同一类型的变量可以在一行中声明,变量名之间用逗号隔开。例如:
定义变量时,需要为其分配一块内存空间,以存储其值。语法形式如下:
根据占有的内存空间大小,整型变量可分为基本整型(int)、短整型(short)和长整型(long)3类。根据是否有符号,还可分为有符号整型(signed)和无符号整型(unsigned)两类。
因此,整型变量共分为 6 类,如下表所示。其中,方括号中的关键字可以省略。
不同的整型,其在内存中占用的字节空间不相同,因此可表述的变量数值范围也不同。以 32 位操作系统为例,短整型、整型、长整型变量占用的字节数和可表示的数值范围如下表所示。
例如,下面定义了一个整型变量 a,为它分配了 4 个字节的内存空间,并设初始值为 10。
注意,根据 CPU 寄存器位数和编译器的不同,最大的整型数值也会不同。32 位操作系统中,基本整型(简称为整型)为 4 字节,长整型为 4 字节;64 位操作系统中,基本整型为 4 字节,长整型为 8 字节。
说明,C++ 程序中,布尔型(bool)被当作整型对待,false 表示 0,true 表示 1。因此,将布尔型赋值给整型是合法的,将整型赋值给布尔型也是合法的。例如:
float 和 double 相比,double 类型的变量具有更高的精度,即它可以表示更多的小数位数。float 保留到小数点后 7 位,有效数字为 6~7 位;double 保留到小数点后 16 位,有效数字为 15~16 位。实际开发中,一般多使用 double 类型,尽可能地避免精度损失。
例如,下面代码声明了多个浮点型变量:
如果将 86041238.78 与 5 相加,输出的结果为 86041245.00,而不是 86041243.78。
例如,下述代码直接将浮点型变量与 0 进行比较,不是高质量的代码。如果程序要求的精度非常高,可能会产生未知的结果。
通常的做法是,定义 0 的精度,然后判断浮点数是否在该精度范围内。例如:
在 C++ 程序中,声明变量时可以把数值赋给变量,这个过程叫变量赋初值。除此以外,还可以先声明变量,再为其赋值。
例如,下面的代码先声明整型变量 i,然后将常量 100 赋值给 i:
例如,下面的代码声明了 3 个整型变量 i、j、k,先为变量 i、j 赋值,再将 i+j 的值赋给 k:
例如,定义两个字符型变量并赋值,一个字符进行减 32 计算,另一个字符进行加 32 计算,最后这两个字符分别进行加 10 计算,并通过格式化输出函数 printf() 以 %d 和 %c 格式输出。代码如下:
C++ 程序中,每个变量都必须有一个名称作为唯一的标识,且具有一个特定的数据类型。变量使用之前,一定要先进行声明或定义。
C++变量的声明和定义
在 C++ 中,变量声明是指为变量提供一个名称,并告诉编译器这个变量将被使用,但不会为其分配内存空间。变量声明的一般形式如下:
数据类型 变量名;
- “数据类型”指变量的类型,如整型、浮点型、字符型等;
- “变量名”则是用户给变量起的名称,必须符合标识符的命名规则。
多个同一类型的变量可以在一行中声明,变量名之间用逗号隔开。例如:
int x; int a,b,c;
定义变量时,需要为其分配一块内存空间,以存储其值。语法形式如下:
数据类型 变量名=初始值;例如,下面定义了多个变量:
int x=10; int a=,b=2,c=3;注意,定义多个赋相同初值的变量时,应写成“int a=3, b=3, c=3;”形式,不能写成“int a=b=c=3;”形式。
C++整型变量
整型变量就是用来存储整型数值的变量。根据占有的内存空间大小,整型变量可分为基本整型(int)、短整型(short)和长整型(long)3类。根据是否有符号,还可分为有符号整型(signed)和无符号整型(unsigned)两类。
因此,整型变量共分为 6 类,如下表所示。其中,方括号中的关键字可以省略。
类型 | 关键字 | 简化形式 | 类型 | 关键字 | 简化形式 |
---|---|---|---|---|---|
整型 | [signed] int | int | 无符号整型 | unsigned [int] | unsigned |
短整型 | [signed] short [int] | short | 无符号短整型 | unsigned short [int] | unsigned short |
长整型 | [signed] long [int] | long | 无符号长整型 | unsigned long [int] | unsigned long |
不同的整型,其在内存中占用的字节空间不相同,因此可表述的变量数值范围也不同。以 32 位操作系统为例,短整型、整型、长整型变量占用的字节数和可表示的数值范围如下表所示。
关键字 | 类型 | 字节数 | 数值范围 |
---|---|---|---|
short | 短整型 | 2 | -32768~32767,即-2^15~2^15-1 |
unsigned short | 无符号短整型 | 2 | 0~65535,即 0~2^16-1 |
int | 整型 | 4 | -2147483648~2147483647,即-2^31~2^31-1 |
unsigned int | 无符号整型 | 4 | 0~4294967295,即 0~2^32-1 |
long | 长整型 | 4 | -2147483648~2147483647,即-2^31~2^31-1 |
unsigned long | 无符号长整型 | 4 | 0~4294967295,即 0~2^32-1 |
例如,下面定义了一个整型变量 a,为它分配了 4 个字节的内存空间,并设初始值为 10。
int a=10;变量赋值时,整型常量后可以加上 L 或 l、U 或 u 等后缀,清晰指明其类型,如 1314L、520U 等。
注意,根据 CPU 寄存器位数和编译器的不同,最大的整型数值也会不同。32 位操作系统中,基本整型(简称为整型)为 4 字节,长整型为 4 字节;64 位操作系统中,基本整型为 4 字节,长整型为 8 字节。
说明,C++ 程序中,布尔型(bool)被当作整型对待,false 表示 0,true 表示 1。因此,将布尔型赋值给整型是合法的,将整型赋值给布尔型也是合法的。例如:
bool ret; // 定义布尔型变量 ret int var = 3; // 定义整型变量 var,并为其赋初值 3 ret = var; // 将整型变量 var 赋给布尔型变量 ret,相当于 ret=true var = ret; // 将布尔型变量 ret 赋给整型变量 var,相当于 var=1
C++浮点型变量
浮点型变量分为单精度(float)、双精度(double)和长双精度(long double)3 类,其占用的字节数和可表示的数值范围如下表所示。关键字 | 类型 | 字节数 | 数值范围 |
---|---|---|---|
float | 单精度型 | 4 | -3.4×10^-38~3.4×10^38 |
double | 双精度型 | 8 | -1.7×10^-308~1.7×10^308 |
long double | 长双精度型 | 8 | -1.1×10^-4932~1.1×10^4932 |
float 和 double 相比,double 类型的变量具有更高的精度,即它可以表示更多的小数位数。float 保留到小数点后 7 位,有效数字为 6~7 位;double 保留到小数点后 16 位,有效数字为 15~16 位。实际开发中,一般多使用 double 类型,尽可能地避免精度损失。
例如,下面代码声明了多个浮点型变量:
float a; double b; long double c;在程序中使用浮点型数据时,需要注意以下两点:
1) 浮点型数据相加
浮点型数据的有效数字是有限制的,如 float 的有效数字是 6 位或 7 位,如果将数字 86041238.78 赋值给 float 类型,显示的数字可能是 86041240.00,个位数 8 被四舍五入,小数位被忽略。如果将 86041238.78 与 5 相加,输出的结果为 86041245.00,而不是 86041243.78。
2) 浮点型数据与0进行比较
在开发程序的过程中,经常会进行两个浮点型数据的比较,此时尽量不要使用“==”或“!=”运算符,而应使用“>=”或“<=”之类的运算符。例如,下述代码直接将浮点型变量与 0 进行比较,不是高质量的代码。如果程序要求的精度非常高,可能会产生未知的结果。
float fvar = 0.00001; if(fvar == 0.0) // 判断是否为 0 ...
通常的做法是,定义 0 的精度,然后判断浮点数是否在该精度范围内。例如:
#include <iostream> using namespace std; int main() { float eps = 0.0000000001; // 定义 0 的精度 float fvar = 0.00001; if (fvar >= -eps && fvar <= eps) // 如果浮点数在精度范围内 cout << "等于零!"; else // 如果浮点数超出精度范围 cout << "不等于零!"; }程序运行结果为:
不等于零!
注意,数字里可以有下画线,这些下画线不会影响数字的值,仅提供分隔作用,方便阅读。下画线不能写在数字开头或末尾,二进制和十六进制前缀字母旁,以及小数点旁。C++变量赋值
变量的值是动态改变的,每次改变都需要进行赋值。变量赋值的形式如下:变量名=表达式;其中,表达式由运算符、操作数、括号等组成。最简单的表达式就是一个数。
在 C++ 程序中,声明变量时可以把数值赋给变量,这个过程叫变量赋初值。除此以外,还可以先声明变量,再为其赋值。
例如,下面的代码先声明整型变量 i,然后将常量 100 赋值给 i:
int i; i = 100;
例如,下面的代码声明了 3 个整型变量 i、j、k,先为变量 i、j 赋值,再将 i+j 的值赋给 k:
int i,j,k; i=100,j=50; k = i+j;
C++字符型变量
char 关键字用来定义字符型变量,其在内存中占用 1 个字节。例如:char ch1; ch1 = 'a';字符型变量在内存中存储的是字符的 ASCII 码,即一个无符号整数。其形式与整型变量的存储形式一样,因此字符型数据与整型数据之间可以通用。也就是说:
- 一个字符型数据,既可以字符形式输出,也可以整数形式输出。
- 允许对字符数据进行算术运算,即对它们的 ASCII 码值进行算术运算。
例如,定义两个字符型变量并赋值,一个字符进行减 32 计算,另一个字符进行加 32 计算,最后这两个字符分别进行加 10 计算,并通过格式化输出函数 printf() 以 %d 和 %c 格式输出。代码如下:
#include <iostream> using namespace std; int main() { char ch1, ch2; ch1='A'; ch2='b'; // 为 ch1、ch2 赋值 printf("ch1=%c,ch2=%c\n", ch1+32, ch2-32); // 用 %c 格式输出字符变量和 32 的运算结果 printf("ch1+10=%d\n", ch1+10); // 用 %d 格式输出 printf("ch1+10=%c\n", ch1+10); // 用 %c 格式输出 printf("ch2+10=%d\n", ch2+10); // 用 %d 格式输出 printf("ch2+10=%c\n", ch2+10); // 用 %c 格式输出 }程序运行结果为:
ch1=a,ch2=B
ch1+10=75
ch1+10=K
ch2+10=108
ch2+10=l