ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 变量 ~~~ 1byte = 8bit    一个字节占8个二进制位 32位机中 char:    1个字节 short:   2个字节 int:       4个字节 long:    4个字节 64位机中 char:    1个字节 short:   2个字节 int:       4个字节 long:    8个字节 ~~~ 变量定义的一般形式为:数据类型 变量名; 多个类型相同的变量:数据类型 变量名, 变量名, 变量名...; 注意:在定义中不允许连续赋值,如int a=b=c=5;是不合法的。 变量的赋值分为两种方式:1.先声明再赋值 2.声明的同时赋值,例如: ~~~ int a; a=100; ~~~ ## 局部变量和全局变量 变量,按作用域范围可分为两种,即局部变量和全局变量。 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。在复合语句中也可定义变量,其作用域只在复合语句范围内。 全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序 ## 变量存储类别 根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。 动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。 C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。 1、用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。 2、用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量 注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。 3、为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明 注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;局部静态变量不能定义为寄存器变量。 4、用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量 ## 注意 变量如果不初始化,可以编译成功,但是执行的时候,很可能报错.操作系统是如何管理内存的! 每当一个应用程序打开时,操作系统为其分配内存,内存有内存地址与内存单元,当应用程序初始化运行时,会往内存单元里面写数据,当操作系统回收的时候,并不清空内存单元,所以就存在大量的垃圾数据 如果变量不初始化,就会默认读取垃圾数据,有些垃圾数据会导致程序 崩溃 VC++2010编译器可以感知变量没有初始化,调试的时候就会出错 所以,变量使用之前,必须初始化 # 格式化输出 当输出语句中包含普通字符时,可以采用一下格式: printf("普通字符输出格式符", 输出项); C语言中的常用格式化符: ![](https://box.kancloud.cn/5565e683d672eb87a98bba7dc0da93bb_778x184.jpg) `%p 以无符号16进制打印内存地址` `%x 16进制格式化` 数组名本身就表示地址 如果要输出多个变量的并指定变量的位置时候,格式符还可以连用,变量之间需要用逗号隔开,如: ~~~ #include <stdio.h> int main(int argc, char const *argv[]) { int a; float b; a=10; b=7.56; char x ='c'; printf("整数:%d,小数:%f,字符%c \n",a,b,x); return 0; } ~~~ --- putchar输出一个char ~~~ putchar(100); //输出d是ascii码 putchar('a'); //输出a ~~~ # 常量 在程序执行过程中,值不发生改变的量称为常量。C语言的常量可以分为直接常量和符号常量。 直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!” 下面的代码分别打印这四种直接常量: ~~~ printf("%d\n", 100); //整形常量 printf("%f\n", 3.14); //实型常量 printf("%c\n", 'A'); //字符型常量 printf("helloworld" ); //字符串型常量 ~~~ 在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为: ` #define 标识符 常量值 ` 修改常量,可以只需要修改一次,实现批量修改 ` #define 标识符 常量值 ` 符号常量的标示符一般习惯使用大写字母,变量的标示符一般习惯使用小写字母,加以区分。下面是一个使用符号常量的小例子: define也叫定义宏 ~~~ #include <stdio.h> #define PI 3.14 int main(int argc, char const *argv[]) { printf("圆周率: %f\n", PI); return 0; } ~~~ const也可以 ~~~ const int a = 1; int const b = 2; printf("%d\n", b); ~~~ 注意:常量是不可改变的 ## 区别 ~~~ #define Pai 3.14 const float pai 3.14 ~~~ const修饰的本身还是变量,但是不允许修改了 第一种方式: 是将pi定义成一种符号,此时pi只是3.14的别名,在编译期间用3.14去取代pi的值,define相当于替换 第二种方式: 是将pi定义成变量,但告诉编译器它的值是固定不变的,如果试图修改,会报错 define需要修改的时候,只需要修改一次,就可以实现批量修改,效率高而且准确 如果想修改的话只需要 ~~~ #define pi 3.14 #define pi 3 ~~~ ## 字符常量 数字0: 内存中存的是0 `'0'`: 内存中存的是48 `'\0'`: 内存中存的是0 `'\0' == '0'` --- * 定义:用单引号括起来的单个普通字符或转义字符 * 字符常量的值:该字符的ASCII码值 * 转义字符:反斜线后面跟一个字符或一个代码值表示 | 转义字符 | 含义 | | --- | --- | | \n | 换行 | | \v | 垂直制表 | | \r | 回车 | | \a | 响铃 | | \' | 单引号 | | \ddd | 3位8进制数代表的字符 | | \t | 水平制表 | | \b | 退格 | | \f | 换页 | | \\ | 反斜线 | | \xhh | 2位16进制代表的字符 |