C++ 变量详细讲解
在 C++ 中,变量(Variable) 是用于存储数据的标识符,程序可以对其进行修改、使用或更新。C++ 变量必须先声明,然后才能使用。
1. C++ 变量的声明和初始化
(1) 变量的声明
在 C++ 中,变量必须先声明,格式如下:
数据类型 变量名;
例如:
int age;
double pi;
char grade;
注意: 变量声明后,如果没有赋初值,则会存储 随机垃圾值。
(2) 变量的初始化
变量可以在声明时初始化:
int age = 25;
double pi = 3.14159;
char grade = 'A';
或者使用 C++11 及以上的 列表初始化(推荐):
int age{25};
double pi{3.14159};
char grade{'A'};
优点: 列表初始化可以防止 数据截断,例如:
int num{3.14}; // ❌ 编译错误,防止数据截断
int num2 = 3.14; // ✅ num2 被赋值 3(隐式转换)
2. C++ 变量的类型
C++ 变量的类型决定了它能存储的数据类别,常见的数据类型包括:
数据类型 | 说明 | 示例值 |
---|---|---|
int | 整数型 | 10, -5 |
double | 双精度浮点数 | 3.14, -2.5 |
float | 单精度浮点数 | 3.14f |
char | 字符型 | 'A', 'b' |
bool | 布尔类型(真/假) | true , false |
string | 字符串(C++标准库) | "Hello" |
wchar_t | 宽字符类型(存储 Unicode) | L'A' |
示例:
#include <iostream>
#include <string> // 引入 string 头文件
int main() {
int num = 42;
double pi = 3.14;
char letter = 'A';
bool isValid = true;
std::string name = "Alice"; // C++ 字符串类型
std::cout << "Number: " << num << std::endl;
std::cout << "Pi: " << pi << std::endl;
std::cout << "Letter: " << letter << std::endl;
std::cout << "Is Valid: " << isValid << std::endl;
std::cout << "Name: " << name << std::endl;
return 0;
}
3. C++ 变量的作用域
变量的 作用域(Scope) 指的是变量可以被访问的范围,主要分为:
-
局部变量(Local Variable):定义在函数或代码块内部,仅在该作用域内有效。
-
全局变量(Global Variable):定义在所有函数之外,整个程序都可以访问。
(1) 局部变量
#include <iostream>
void func() {
int x = 10; // 局部变量
std::cout << "Inside func: " << x << std::endl;
}
int main() {
func();
// std::cout << x; // ❌ 错误,x 在 main() 函数中不可见
return 0;
}
(2) 全局变量
#include <iostream>
int globalVar = 100; // 全局变量
void display() {
std::cout << "Global Variable: " << globalVar << std::endl;
}
int main() {
display();
std::cout << "Accessing in main: " << globalVar << std::endl;
return 0;
}
注意:
-
全局变量可以在多个函数之间共享,但可能导致代码难以维护。
-
局部变量的优先级高于全局变量,即 如果局部变量和全局变量同名,则局部变量优先使用。
4. C++ 变量的存储类型
C++ 提供 4 种存储类型:
存储类型 | 说明 |
---|---|
auto | 自动存储,编译器自动推导类型(C++11 引入) |
register | 存储在 CPU 寄存器中(现代编译器基本忽略) |
static | 静态变量,生命周期贯穿整个程序 |
extern | 外部变量,在多个文件间共享 |
示例:
#include <iostream>
// 外部变量声明
extern int globalVar;
int main() {
static int counter = 0; // 静态变量,每次函数调用不会重新初始化
counter++;
std::cout << "Counter: " << counter << std::endl;
return 0;
}
5. C++ 变量的类型转换
(1) 自动类型转换(隐式转换)
int num = 10;
double result = num; // 隐式转换为 double 类型
(2) 强制类型转换(显式转换)
double pi = 3.14159;
int piInt = (int) pi; // C 语言风格
int piInt2 = int(pi); // C++ 风格
(3) static_cast<>
转换(推荐)
double pi = 3.14159;
int piInt = static_cast<int>(pi);
6. C++ 变量命名规则
-
变量名 只能包含字母、数字和下划线,不能使用特殊字符。
-
变量名 不能以数字开头。
-
变量名 区分大小写(
myVar
和MyVar
是不同的)。 -
不能使用 C++ 关键字(如
int, return, for
)。 -
建议使用有意义的变量名,如
userAge
而不是a
。
示例:
int age; // ✅ 合法
int _count; // ✅ 合法
int 1num; // ❌ 非法,不能以数字开头
int return; // ❌ 非法,关键字不能用作变量名
7. C++ 变量的常量化
如果变量的值不应被修改,可以使用 const
关键字 定义常量:
const double PI = 3.14159;
尝试修改 PI
会报错:
PI = 3.14; // ❌ 错误,常量不能修改
总结
-
C++ 变量必须先声明后使用,并且有不同的数据类型。
-
变量的作用域影响可访问性,局部变量优先于全局变量。
-
static
变量不会在函数调用间被销毁,而extern
用于跨文件共享变量。 -
const
关键字用于声明常量,防止变量被修改。 -
C++11 及以上支持
auto
关键字和列表初始化,更安全、更现代化。
如果你对某个部分有疑问或想深入了解某个概念,欢迎继续讨论!