变量
变量的定义
变量就是可以变化的量,它有一个名字,你可以这样理解变量
- 在内存上有一个“箱子”,这个“箱子”有名字,和一个编号(地址)
- 你可以改变“箱子”里的内容(数字)
内存模型
- 内存可以认为一个很长的纸条
- 纸条由一个一个小格子组成
- 每个格子都有一个编号,从0开始
- 每个格子的大小是8 bit,也就是1 byte
变量占用的内存大小
类型 | 格子数 | 大小 |
---|---|---|
bool | 1 | 1 byte |
char | 1 | 1 byte |
int | 4 | 4 byte |
float | 4 | 4 byte |
double | 8 | 8 byte |
内存大小转换
英文 | 中文 | 大小关系 |
---|---|---|
bit | 位 | |
byte | 字节 | |
kb | 千字节 | |
mb | 兆字节 | |
gb | 千兆字节 |
变量的域
写代码时发现有{}
符号围起的一块区域,这样的区域我们称为一个代码块,
想一想下面的代码的输出结果是什么?为什么可以定义两个同名的a呢?
cpp
#include <iostream>
using namespace std;
int main()
{
int a = 1;
{
int a = 2;
cout << a << endl;
}
cout << a << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
plaintext
{
+----------------------+
|R int a = 1; |
|O { |
|O +---------+ |
|M | int a=2 | |
|1 | room2 | |
| +---------+ |
| } |
+----------------------+
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
一个代码块你可以认为一个教室。 代码块中的一个变量就相当于教室的一个学生,变量名就是学生的名字。 显然一个教室不能出现同名的学生(因为老师提问的时候不知道由谁来回答)
{}
里再包一个{}
,形成,相当于教室(room)里还包含了一个教室
不同的教室可以有同样名字的学生(变量)
如果在本教室里没有查到想要的学生(变量),老师会走出当前教室去外面的一个教室查找,如果还没有,继续向外查找。
局部变量:被
{}
包含的变量全部变量:没有被任何
{}
包含的变量
查找原则:只会一直向外查找,不会向里查找!
没有初始化的变量的值是什么
- 局部变量是未知
- 全局变量是0
cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5,maxe = 1e6+5; //点与边的数量
int n; //全局变量,未初始化,值为0
int arr[10] ;//全局变量 数组 值全部为0
int main(){
int a; // 局部变量 值是未知
int b[10] ;//局部变量 数组值未知
cout << "n = " << n << endl;
cout << "a = " << a << endl;
for(int i=0;i<=9;++i){
cout << "arr["<< i << "] = " << arr[i] <<endl;
}
for(int i=0;i<=9;++i){
cout << "b["<< i << "] = " << b[i] <<endl;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24