变量和常量
#C
2024-08-28
- 变量的本质
- 常量折叠
- 十六进制 00000016 转换成 十进制为 22,所以当一个C语言程序中存在常量表达式时,编译器在编译时会把常量表达式优化成一个固定的常量值,以节省存储空间。我们把这种编译优化称为常量折叠。
变量的本质
在C语言中,不同类型的数据有不同的存储方式,在内存中所占的大小不同,地址对齐方式也不相同。我们可以使用不同的数据类型来定义变量,不同类型的变量在内存中的存储方式和大小也不相同。
1 |
|
输出结果:
1 |
|
数据类型定义字节大小,变量名是内存地址的别名,存储实际数据。这个内存地址是存储实际数据的起始地址,而数据类型的字节大小就表明从这个起始地址开始读取的字节大小,这样就能够找到对应存储的实际数据,不会多读,也不会少读。
变量名的本质,其实就是一段内存空间的别名。编译器在编译程序时会将变量名看成一个符号,符号值即变量的地址,各种不同的符号保存在符号表中。我们可以通过变量名对和它绑定的内存单元进行读写,而不是直接使用内存地址。通过变量名访问内存,既方便了程序的编写,也大大增强了程序的可读性。
不同类型的变量有不同的存储方式、作用域和生命周期。在定义一个变量时,我们可以使用char、int、float、double等关键字来指定变量的类型,再加上short和long这两个整型限定符,基本上就确定了这个变量在内存中的存储空间的大小。有时候我们还可以使用一些变量修饰限定符来改变变量的存储方式,常用的修饰符有auto、register、static、extern、const、volatile、restrict、typedef等。这些修饰限定符往往会决定变量的存储位置、作用域或生命周期,所以一般也被称为存储类关键字。
常量折叠
1 |
|
查看变量地址存储数据:
十六进制 00000016 转换成 十进制为 22,所以当一个C语言程序中存在常量表达式时,编译器在编译时会把常量表达式优化成一个固定的常量值,以节省存储空间。我们把这种编译优化称为常量折叠。
⭐️内容取自王利涛《嵌入式自我修养》,仅从中取出个人以为需要纪录的内容。不追求内容的完整性,却也不会丢失所记内容的逻辑性。如果需要了解细致,建议读原书。