首页 > 编程笔记 > C++笔记 阅读:17

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 码,即一个无符号整数。其形式与整型变量的存储形式一样,因此字符型数据与整型数据之间可以通用。也就是说:
例如,定义两个字符型变量并赋值,一个字符进行减 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

相关文章