C++编程入门:变量与基本数据类型
变量与基本数据类型
变量:数据的容器¶
在C++编程中,变量是我们存储和操作数据的基本工具。你可以把变量想象成一个贴有标签的盒子,里面可以存放各种类型的数据。
1.1 变量的声明与初始化
在C++中,使用变量前需要先声明它,告诉编译器变量的名称和类型:
基础语法示例¶
1. 变量和数据类型¶
int age; // 声明一个整型变量age
double price; // 声明一个双精度浮点型变量price
char grade; // 声明一个字符型变量grade
bool isPassed; // 声明一个布尔型变量isPassed
变量声明后可以立即初始化(赋予初始值):
int score = 100; // 声明并初始化
double temperature = 36.5; // 声明并初始化
char initial = 'A'; // 字符使用单引号
std::string name = "Alice"; // 字符串使用双引号
C++11引入了更简洁的初始化方式:
int count{10}; // 使用花括号初始化
double pi{3.14159}; // 这种方式可以防止窄化转换
2. 变量的命名规则¶
只能包含字母、数字和下划线 不能以数字开头 不能使用C++关键字(如int, class等) 区分大小写 建议使用有意义的名称(如studentCount而非sc)
3. 变量的作用域¶
变量的作用域决定了它在程序中的可见范围:
#include <iostream>
int globalVar = 10; // 全局变量,整个程序可见
int main() {
int localVar = 20; // 局部变量,只在main函数内可见
{
int blockVar = 30; // 块作用域变量,只在这个代码块内可见
std::cout << blockVar << std::endl;
}
// std::cout << blockVar << std::endl; // 错误:blockVar在此不可见
std::cout << globalVar << std::endl; // 正确
std::cout << localVar << std::endl; // 正确
return 0;
}
变量的存储位置:栈与堆¶
栈(stack):自动管理的内存区域,存储局部变量和函数调用信息。当变量超出作用域时自动释放。 堆(heap):动态分配的内存区域,需要手动管理(分配和释放)。
#include <iostream>
int main() {
// 栈上分配的变量
int stackVar = 10;
// 堆上分配的变量(使用new)
int* heapVar = new int(20);
std::cout << "栈变量: " << stackVar << std::endl;
std::cout << "堆变量: " << *heapVar << std::endl;
// 必须手动释放堆内存
delete heapVar;
return 0;
}
基本数据类型¶
C++提供了多种基本数据类型,它们的主要区别在于存储大小和表示的数值范围。
2.1 整型类型¶
类型 | 大小(通常) | 范围(通常) |
---|---|---|
char | 1字节 | -128到127或0到255 |
short | 2字节 | -32,768到32,767 |
int | 4字节 | -2,147,483,648到2,147,483,647 |
long | 4或8字节 | 取决于平台 |
long long | 8字节 | -9,223,372,036,854,775,808到9,223,372,036,854,775,807 |
示例:
#include <iostream>
#include <climits> // 包含各种数据类型的极限值
int main() {
char smallNumber = 100;
short mediumNumber = 30000;
int largeNumber = 2000000000;
long long veryLargeNumber = 9000000000000000000LL;
std::cout << "char范围: " << CHAR_MIN << " 到 " << CHAR_MAX << std::endl;
std::cout << "int范围: " << INT_MIN << " 到 " << INT_MAX << std::endl;
return 0;
}
浮点型类型¶
类型 大小(通常) 精度 范围(通常) float 4字节 约7位有效数字 ±1.18×10^-38到±3.4×10^38 double 8字节 约15-16位有效数字 ±2.23×10^-308到±1.80×10^308
示例:
#include <iostream>
#include <iomanip> // 用于控制输出格式
int main() {
float piFloat = 3.14159265358979323846f;
double piDouble = 3.14159265358979323846;
std::cout << "float PI: " << std::setprecision(10) << piFloat << std::endl;
std::cout << "double PI: " << std::setprecision(10) << piDouble << std::endl;
return 0;
}
2.3 布尔类型¶
bool类型只有两个值:true(1)和false(0)。
#include <iostream>
int main() {
bool isCppFun = true;
bool isFishy = false;
std::cout << "C++有趣吗? " << isCppFun << std::endl;
std::cout << "这可疑吗? " << isFishy << std::endl;
// 布尔值在条件语句中最有用
if (isCppFun) {
std::cout << "让我们继续学习C++!" << std::endl;
}
return 0;
}
3. sizeof操作符¶
sizeof操作符用于确定数据类型或变量占用的内存大小(以字节为单位)。
#include <iostream>
int main() {
std::cout << "数据类型大小(字节):" << std::endl;
std::cout << "char: " << sizeof(char) << std::endl;
std::cout << "short: " << sizeof(short) << std::endl;
std::cout << "int: " << sizeof(int) << std::endl;
std::cout << "long: " << sizeof(long) << std::endl;
std::cout << "long long: " << sizeof(long long) << std::endl;
std::cout << "float: " << sizeof(float) << std::endl;
std::cout << "double: " << sizeof(double) << std::endl;
std::cout << "bool: " << sizeof(bool) << std::endl;
// 也可以用于变量
int x = 0;
std::cout << "变量x的大小: " << sizeof(x) << std::endl;
return 0;
}
注意:sizeof的结果可能因编译器和平台而异。例如,在32位和64位系统上,某些数据类型的大小可能不同。
4. 类型修饰符¶
C++提供了类型修饰符来改变基本类型的含义:
- signed:有符号类型(默认)
- unsigned:无符号类型(仅非负数)
- short:短整型
- long:长整型
#include <iostream>
int main() {
unsigned int positiveOnly = 4000000000; // 更大的正数范围
signed int normalInt = -2000000000; // 可以包含负数
short int smallNumber = 30000; // 节省空间
long int bigNumber = 2000000000; // 更大的范围
std::cout << "无符号整数: " << positiveOnly << std::endl;
std::cout << "有符号整数: " << normalInt << std::endl;
return 0;
}
5. 类型转换¶
C++中有时需要将一种类型转换为另一种类型:
5.1 隐式类型转换¶
int i = 42;
double d = i; // 隐式将int转换为double
5.2 显式类型转换(C风格)¶
double pi = 3.14159;
int approxPi = (int)pi; // 显式转换,丢失小数部分
5.3 C++风格的类型转换¶
double pi = 3.14159;
int approxPi = static_cast<int>(pi); // 更安全的C++风格转换
6. 常量¶
使用const关键字声明不可修改的变量:
const double PI = 3.141592653589793;
const int MAX_STUDENTS = 100;
// PI = 3.14; // 错误:不能修改常量
C++11引入了constexpr,表示编译时常量:
7. auto关键字(C++11)¶
auto让编译器自动推断变量类型:
auto x = 5; // x是int
auto y = 3.14; // y是double
auto z = "Hello"; // z是const char*
// 特别适用于复杂类型
std::vector<std::string> names = {"Alice", "Bob"};
auto it = names.begin(); // it的类型是std::vector<std::string>::iterator
总结¶
本章介绍了C++中的变量和基本数据类型,包括:
变量的声明、初始化和作用域 基本数据类型:整型、浮点型和布尔型 使用sizeof操作符获取类型大小 类型修饰符和类型转换 常量的使用 C++11的auto关键字 理解这些基础概念对于后续学习C++编程至关重要。在下一章中,我们将探讨运算符和表达式,这是操作这些变量的基本工具。