基础数据变量
内容简介
变量是程序保存数据的基本单位,类型决定变量能保存什么值、占多少内存、能参与哪些运算。C/C++ 是静态类型语言,变量通常要先声明类型再使用。
本篇只建立主线概念:变量、基础类型、初始化、字面量和作用域。类型转换、size_t、固定宽度整数放到 CandCpp数据变量进阶;C 语言更细的整型提升、有符号/无符号转换规则放到 C语言类型转换规则。
用法
常见基础类型
| 类型 | 含义 | 常见大小 |
|---|---|---|
char | 字符或小整数 | 1 字节 |
short | 较短整数 | 通常 2 字节 |
int | 常用整数 | 通常 4 字节 |
long | 长整数 | 平台相关 |
long long | 更长整数 | 至少 8 字节 |
float | 单精度浮点数 | 通常 4 字节 |
double | 双精度浮点数 | 通常 8 字节 |
bool | 布尔值,C++ 内置,C99 需 <stdbool.h> | 通常 1 字节 |
void | 无类型,常用于函数无返回值或 void* | 不用于定义普通变量 |
int age = 18;
double score = 95.5;
char level = 'A';#include <string>
bool passed = true;
std::string name = "Alice";声明、定义和初始化
int count = 0; // 定义并初始化
extern int total; // 声明:total 在别处定义局部变量如果没有初始化,读取它是未定义行为。
int value;
/* printf("%d\n", value); 错误:value 未初始化 */整数字面量
int decimal = 100; // 十进制
int hex = 0xFF; // 十六进制
int octal = 067; // 八进制
int binary = 0b1010; // 二进制:C++14 标准支持,C 中常见编译器扩展字符和字符串
char ch = 'A';
char text[] = "Hello"; // 实际包含 'H' 'e' 'l' 'l' 'o' '\0'#include <string>
std::string text = "Hello";作用域和生命周期
int global_count = 0; // 文件作用域,静态存储期
int main(void)
{
int local_count = 0; // 块作用域,自动存储期
return 0;
}基础阶段先理解全局变量和局部变量。static、extern、volatile 等更细规则见 C语言存储类型。
最佳代码实践
- 变量定义时尽量初始化,避免读到未定义值。
- 用有意义的变量名,例如
student_count比n更容易维护。 - C++ 字符串优先使用
std::string,动态数组优先使用std::vector。 - 需要明确大小时使用
<stdint.h>/<cstdint>中的int32_t、uint64_t等类型。 - 需要表达大小、长度、字节数时使用
size_t/std::size_t。 - 浮点数比较不要直接用
==,应比较误差范围。
double a = 0.1 + 0.2;
double b = 0.3;
if (std::abs(a - b) < 1e-9) {
// 认为相等
}错误用法
int value;
printf("%d\n", value); // 错误:value 未初始化char text[5] = "hello"; // 错误:缺少字符串结尾的 '\0' 空间int 1age = 18; // 错误:变量名不能以数字开头
int float = 1; // 错误:不能使用关键字作变量名int value = 23.9; // 错误倾向:小数部分被截断注意事项
char是否有符号与编译器有关,需要明确时写signed char或unsigned char。long的大小在不同平台可能不同,不要假设它一定是 8 字节。- C 语言没有内置
bool,C99 可通过#include <stdbool.h>使用bool。 void main()不是标准写法,入口函数推荐写int main(void)或int main()。- 表达式计算中的自动转换很重要,但不适合堆在入门主线里,细节见 C语言类型转换规则。
学习路径
- 上一节:CandCpp入门
- 当前阶段:CandCPP基础
- 下一节:CandCpp标准输入输出