变量为我们提供了命名存储,我们的程序可以对其进行操作。每个 C++ 变量都有一个特定的类型,这决定了变量内存的大小和布局;可以存储在该内存中的值的范围;以及可以应用于变量的操作集。
C++ 变量命名规则
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。由于 C++ 是区分大小写的,所以大写和小写字母是不同的。
其他一些 C++ 中变量命名的规则包括:
-
-
-
-
变量名不能以特殊字符或数字开始。它应该是大写或小写字母或下划线(_)。
合法变量名示例
一些合法的变量名包括:
int age;
int _age;
int student_age;
int studentAge;
非法变量名示例
一些非法的变量名包括:
int 2ndvariable;
int student-age;
int float;
int student age;
int #age;
C++ 变量类型
C++ 中的基本变量类型如下所述:
序号 |
类型 |
描述 |
1 |
bool |
存储 true 或 false 值。 |
2 |
char |
通常是一个八位(一个字节)。这是一个整数类型。 |
3 |
int |
对于机器来说最自然的整数大小。 |
4 |
float |
单精度浮点值。 |
5 |
double |
双精度浮点值。 |
6 |
void |
表示无类型。 |
7 |
wchar_t |
一个宽字符类型。 |
C++ 还允许定义其他类型的变量,比如枚举(enumeration)、指针(pointer)、数组(array)、引用(reference)、数据结构和类(class),这些将在后续章节中介绍。
接下来的部分将涵盖如何定义、声明和使用各种类型的变量。
C++ 中的变量定义
变量定义告诉编译器在哪里以及为变量创建多少存储空间。变量定义指定了一个数据类型,并包含一个或多个该类型变量的列表,格式如下:
语法
type variable_list;
在这里,type
必须是一个有效的 C++ 数据类型,包括 char
、w_char
、int
、float
、double
、bool
或任何用户定义的对象等,而 variable_list
可以包含一个或多个由逗号分隔的标识符名称。一些有效的声明如下所示:
int i, j, k;
char c, ch;
float f, salary;
double d;
int i, j, k;
这一行既声明又定义了变量 i
、j
和 k
,指示编译器创建名为 i
、j
和 k
的 int
类型变量。
C++ 中的变量初始化
变量可以在声明时进行初始化(分配初始值)。初始化器由等号后跟一个常量表达式组成,格式如下:
语法
type variable_name = value;
示例
一些示例包括:
extern int d = 3, f = 5;
int d = 3, f = 5;
byte z = 22;
char x = 'x';
对于没有初始化器的定义:具有静态存储持续期的变量默认初始化为 NULL(所有字节值为 0);其他所有变量的初始值是未定义的。
C++ 中的变量声明
变量声明向编译器保证存在具有给定类型和名称的一个变量,以便编译器可以继续编译而不需完全了解变量的细节。变量声明仅在编译时有意义,编译器需要实际的变量定义来进行程序链接。
当您使用多个文件并在其中一个文件中定义变量时,变量声明很有用,因为该变量会在程序链接时可用。尽管您可以在 C++ 程序中多次声明一个变量,但它只能在一个文件、函数或代码块中定义一次。
示例
尝试下面的示例,其中变量在顶部被声明,在主函数内部被定义:
#include <iostream>
using namespace std;
extern int a, b;
extern int c;
extern float f;
int main () {
int a, b;
int c;
float f;
a = 10;
b = 20;
c = a + b;
cout << c << endl;
f = 70.0 / 3.0;
cout << f << endl;
return 0;
}
当上述代码被编译和执行时,会产生如下结果:
30
23.3333
同样的概念也适用于函数声明,在声明时提供函数名,其实际定义可以在其他地方给出。例如:
int func();
int main() {
int i = func();
}
int func() {
return 0;
}
L值和 R值
C++ 中有两种类型的表达式:
-
L值 - 指向一个内存位置的表达式被称为“L值”表达式。L值可以出现在赋值语句的左侧或右侧。
-
R值 - R值指的是存储在内存中某个地址的数据值。R值是一个不能被赋予值的表达式,这意味着 R值只能出现在赋值语句的右侧。
变量是 L值,所以可以出现在赋值语句的左侧。数值字面量是 R值,所以不能被赋值并且不能出现在赋值语句的左侧。下面是一个有效语句:
int g = 20;
但是下面不是一个有效语句,并会产生编译错误:
10 = 20;