C-变量,常量,存储类
一.变量
变量是程序可操作的存储区的名称;变量的类型决定了变量存储的大小和布局;变量的名称可以由下划线,字母,数字组成,它必须以字母或者下划线开头。
变量的定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储
变量的声明是向编译器保证变量以指定的类型和名称存在
声明:没有分配内存空间,使用的时候才会分配
定义:立刻为我们分配内存空间 赋初值
二.常量
常量是固定值,在程序执行期间不会改变;可以是任何的基本数据类型
整数常量
整数常量:可以是十进制、八进制或十六进制的常量
- 前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制
- 整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意
浮点常量
浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量
- 当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者
- 当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者
字符常量
字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中
- 有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等
有两种达到常量的方法
- #define预处理器:
#define LENGTH 10
- 使用const关键字:
const int LENGTH = 10;
C语言中的单引号和双引号
-
在 C 语言中没有专门的字符串类型,因此双引号内的字符串会被存储到一个数组中,这个字符串代表指向这个数组起始字符的指针
-
单引号中的内容是一个 char 类型,是一个字符,这个字符对应的是 ASCII 表中的序列值
三.存储类
存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前
-
auto存储类是所有局部变量默认的存储类,只能用在函数内,即 auto 只能修饰局部变量
-
register存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 '&' 运算符(因为它没有内存位置);寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 'register' 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。
-
static存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁;因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值;static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内,全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。
-
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置;当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。