Skip to content

变量

变量的定义

变量就是可以变化的量,它有一个名字,你可以这样理解变量

  • 在内存上有一个“箱子”,这个“箱子”有名字,和一个编号(地址)
  • 你可以改变“箱子”里的内容(数字)

内存模型

内存模型

  • 内存可以认为一个很长的纸条
  • 纸条由一个一个小格子组成
  • 每个格子都有一个编号,从0开始
  • 每个格子的大小是8 bit,也就是1 byte

变量占用的内存大小

类型格子数大小
bool11 byte
char11 byte
int44 byte
float44 byte
double88 byte

int内存占用

内存大小转换

英文中文大小关系
bit也就是一个0或1占用的大小
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
plaintext
{
 +----------------------+
 |R   int a = 1;        |
 |O   {                 |
 |O       +---------+   |
 |M       | int a=2 |   |
 |1       |  room2  |   |
 |        +---------+   |
 |    }                 |
 +----------------------+
}
1
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