# 1.2 变量
**变量**是提供给程序可操作存储区的名称。
> A variable provides us with named storage that our programs can manipulate.
## 变量定义
**变量定义**由变量类型和变量名称两部分组成:
* 变量类型决定了变量存储的大小和布局;
* 变量的名称可以由字母、数字和下划线字符组成,它必须以字母或下划线开头,并且大小写敏感;
## 变量初始化
**初始化**指一个对象在创建时被赋予特定值。
初始化和赋值的区别:
* 初始化是在变量创建时赋予变量一个初始值;
* 赋值操作是指用一个新的值替换变量的当前值;
> Initialisation is not assignment. Initialization happens when a variable is given a value when it is created. Assignment obliterates an objects's current value and replaces that value with a new one.
```
int units_sold = 0;
int units_sold = {0};
int units_sold{0}; // cannot to initilse built-in type by list initialisation
int units_sold (0);
```
带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。
## 变量声明
**变量声明**向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量定义。
```
extern int i; // 声明 但是不定义 i
int j; // 声明 & 定义 k
extern int k = 1; // 声明 & 定义 k
```
一个变量必须被定义一次且只有一次,但可以被声明多次。
## 变量作用域
作用域指程序的一个区域,变量的作用域通常指可以使用该变量的代码区域。根据作用域可以将变量划分成全局变量和局部变量。
[Reference: runoob-C++变量作用域](https://www.runoob.com/cplusplus/cpp-variable-scope.html)
变量在离开其作用域的时候会自动调用析构函数:
``` c++
class Scope {
public:
Scope(const char* p) {
scope_name = p;
printf("start scope %s\n", scope_name);
}
~Scope() {
printf("finish scope %s\n", scope_name);
}
private:
const char* scope_name;
};
int main () {
Scope m("main");
{
Scope r("region");
}
printf("before end program\n");
return 0;
}
// output:
// start scope main
// start scope region
// finish scope region
// before end program
// finish scope main
```
- 目录
- 基础知识
- 1、变量和基础类型
- 1.1、内置类型
- 1.2、变量
- 1.3、复合类型
- 1.4、类型修饰符
- 1.5、类型处理
- 1.6、自定义结构
- 1.7、数组
- 2、表达式和语句
- 2.1、运算符
- 2.2、语句
- 3、函数
- 1、语法相关
- 2、资源管理
- 3、面向对象
- 4、模板与泛型编程
- Problem01:判断类中是否包含函数
- Problem02:解析函数的参数类型
- 5、系统库
- Problem01:多线程维护最大值
- Problem02:介绍一下strcpy、strncpy、memcpy、memmove
- Problem03:介绍一下网络编程
- Problem04:select、poll、epoll的区别
- 未整理
- Problem11:实现在main函数前、后执行的函数
- Problem12:可变参函数的实现
- Problem13:全局变量初始化顺序问题
- Problem14:介绍一下隐式转换
- Problem07:实现一个不能被拷贝的类
- Problem08:实现一个只能通过动态、静态分配的类
- 开源项目
- redis
- 第一部分 数据结构与对象
- redis 底层数据结构
- redis 对象
- taskflow
- 数据结构
- Executor
