1、变量内存分析

1.1 内存模型

  • 内存模型是线性的(有序的)

  • 对于 32 机而言,最大的内存地址是2^32次方bit(4294967296)(4GB)

  • 对于 64 机而言,最大的内存地址是2^64次方bit(18446744073709552000)(171亿GB)

 

1.2 CPU 读写内存

  • CPU 在运作时要明确三件事

存储单元的地址(地址信息)

器件的选择,读 or 写 (控制信息)

读写的数据 (数据信息)

  • 如何明确这三件事情

通过地址总线找到存储单元的地址

通过控制总线发送内存读写指令

通过数据总线传输需要读写的数据

  • 地址总线: 地址总线宽度决定了CPU可以访问的物理地址空间(寻址能力)

例如: 地址总线的宽度是1位, 那么表示可以访问 0 和 1的内存

例如: 地址总线的位数是2位, 那么表示可以访问 00、01、10、11的内存

  • 数据总线: 数据总线的位数决定CPU单次通信能交换的信息数量

例如: 数据总线:的宽度是1位, 那么一次可以传输1位二进制数据

例如: 地址总线的位数是2位,那么一次可以传输2位二进制数据

  • 控制总线: 用来传送各种控制信号

·

1.3 写入流程

  • CPU 通过地址线将找到地址为 FFFFFFFB 的内存

  • CPU 通过控制线发出内存写入命令,选中存储器芯片,并通知它,要其写入数据。

  • CPU 通过数据线将数据 8 送入内存 FFFFFFFB 单元中

 

1.4 读取流程

  • CPU 通过地址线将找到地址为 FFFFFFFB 的内存

  • CPU 通过控制线发出内存读取命令,选中存储器芯片,并通知它,将要从中读取数据

  • 存储器将 FFFFFFFB 号单元中的数据 8 通过数据线送入 CPU寄存器中

 

1.5 变量的存储原则

  • 先分配字节地址大内存,然后分配字节地址小的内存(内存寻址是由大到小)

  • 变量的首地址,是变量所占存储空间字节地址(最小的那个地址 )

  • 低位保存在低地址字节上,高位保存在高地址字节上

 10的二进制: 0b00000000 00000000 00000000 00001010
             高字节←                       →低字节

2、char类型内存存储细节

2.1 char类型基本概念

  • char是C语言中比较灵活的一种数据类型,称为“字符型”

  • char类型变量占1个字节存储空间,共8位

  • 除单个字符以外, C语言的的转义字符也可以利用char类型存储

字符

意义

\b

退格(BS)当前位置向后回退一个字符

\r

回车(CR),将当前位置移至本行开头

\n

换行(LF),将当前位置移至下一行开头

\t

水平制表(HT),跳到下一个 TAB 位置

\0

用于表示字符串的结束标记

\

代表一个反斜线字符 \

\"

代表一个双引号字符"

\’

代表一个单引号字符’

2.2 char型数据存储原理

  • 计算机只能识别0和1, 所以char类型存储数据并不是存储一个字符, 而是将字符转换为0和1之后再存储

  • 正是因为存储字符类型时需要将字符转换为0和1, 所以为了统一, 老美就定义了一个ASCII表

  • ASCII表中定义了每一个字符对应的整数

     char ch1 = 'a';
     printf("%i\n", ch1); // 97

     char ch2 = 97;
     printf("%c\n", ch2); // a

 

2.3 char类型注意点

  • char类型占一个字节, 一个中文字符占3字节(unicode表),所有char不可以存储中文

 char c = '我'; // 错误写法
  • 除转义字符以外, 不支持多个字符

 char ch = 'ab'; // 错误写法
  • char类型存储字符时会先查找对应的ASCII码值, 存储的是ASCII值, 所以字符6和数字6存储的内容不同

 char ch1 = '6'; // 存储的是ASCII码 64
 char ch2 = 6; //  存储的是数字 6
  • 练习

定义一个函数, 实现输入一个小写字母,要求转换成大写输出