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

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

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


TOP