第三章 常量与变量
文章目录
前言
在整个程序的运行过程中,没有变化且不能变化的,我们称之为常量。
在程序运行期间,可以改变并且有可能会改变的,我们称之为变量。
1、常量及常量的类型
常量即常数,表示固定的值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型。
- 字符常量 如’6’,‘a’,‘F’(不能是中文,例如:‘男’,因为一个汉字和全角的符号占两个字节。)
- 整型常量 如6,27,-299
- 浮点型常量 如5.43,-2.3,5.67,6.0
- 字符串常量 如"625",“女”,“nanabc”,“西施”
- 枚举常量
注:前缀指定基数:
- 0x 或 0X 表示十六进制;
- 0 表示八进制;
- 不带前缀则默认表示十进制。
1.1 字符常量
字符常量是括在单引号中,例如,‘x’ 可以存储在char 类型的简单变量中。字符常量可以是一个普通的字符(例如 ‘x’)、一个转义****字符(例如 ‘\t’),或一个通用的字符(例如 ‘\u02C0’)。在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。
1、转义字符的含义:
- \ \ 字符
- ’ ’ 字符
- " " 字符
- ? ? 字符
- \a 警报铃声
- \b 退格键
- \f 换页符
- \n 换行符
- \r 回车
- \t 水平制表符
- \v 垂直制表符
- \ooo 一到三位的八进制数
- \xhh . . . 一个或多个数字的十六进制数
2、转义序列字符实例:
#includeint
main()
{
printf("Hello\tWorld\n\nggggg\n");
return 0;
}
1.2 整型常量
可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
1、整数常量实例:
-
22 /* 合法的 */
-
25u /* 合法的 */
-
0xFeL /* 合法的 */
-
08 /* 非法的:8 不是八进制的数字 */
-
02UU /* 非法的:不能重复后缀 */
2、各类型整数常量实例:
- 88 /* 十进制 */
- 0113 /* 八进制 */
- 0x43b /* 十六进制 */
- 10 /* 整数 */
- 10u /* 无符号整数 */
- 10l /* 长整数 */
- 20ul /* 无符号长整数 */
1.3 浮点型常量
浮点常量由整数部分、小数点、小数部分和指数部分组成。可以使用小数形式或者指数形式来表示浮点常量。当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。
浮点常量实例:
- 3.14159 /* 合法的 */
- 314159E-5L /* 合法的 */
- 510E /* 非法的:不完整的指数 */
- 210f /* 非法的:没有小数或指数 */
- .e55 /* 非法的:缺少整数或分数 */
1.4 字符串常量
如"625",“女”,“nanabc”,“西施”。
1.5 枚举常量
C语言中提供了一种特殊的整型,枚举类型。其关键词为 enum 。
2 、变量及变量的类型
在程序运行期间,可以改变并且有可能会改变的,我们称之为变量。
变量的类型:
- 全局变量
- 局部变量
- 静态变量
- 常变量
2.1 全局变量
global variables
1、作用范围:
- 定义在所有函数体外;
- 全局变量不初始化将自动赋值为0;
- 全局变量的作用域是从定义行开始的,到文件结束;
2、生命周期:
- 开始:主函数main()执行之前;
- 结束:主函数main()结束;
3、特点:
- 全局变量的作用范围与生命周期保持一致。
- 全局变量可以用extern跨文件调用。eg: extern int a;
2.2 局部变量
local variable or auto variable
1、举例:
- 形式参数
- 定义在函数体内的变量,也成为自动变量,由关键字auto说明,可以省略
- 定义在复合语句中的变量
2、作用范围:
定义在函数体内。
3、生命周期:
- 开始:函数被调用。
- 结束:函数结束。
局部变量被释放后,之前对应的内存空间成为公共区域。
2.3 静态变量
static variables
如static int b = 10;//不可以跨文件调用。
静态变量加在局部变量之前,延长局部变量的生命周期到整个程序运行结束。
静态变量的生命周期在全局,作用范围在函数内部,不一致。
原理:首先判断局部变量是否已经分配过空间,如果没有则进行分配;如果已经分配过了(上次调用函数后变量没有被释放),则不再分配空间。
注:静态变量的使用可以避免污染全局空间,使各个程序员编写的程序更好的兼容。
2.4 常变量
const variables
eg: const int a=10;或者 int const a=10;其作用是将变量a恒等于10。
const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,如:
const double pi = 3.1415926;
用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值,如果程序中试图改变它的值,编译的时候就会报错。
3、变量的存储类型
-
变量的存储类型就是指变量存储在什么地方。有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。
-
C语言根据变量的存储类型的不同,可以把变量分为:自动变量、静态变量、寄存器变量。
3.1 自动变量(局部变量)
1、定义:自动变量是存储在堆栈中的。
2、哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是C语言较少使用这个关键字,因为所有的局部变量在默认情况下都是自动变量。
3、生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。
1 void test(int a, int b)
{
2 int c = a + b;
3
4 auto int d;
5 }
3.2 静态变量
- 定义:静态变量是存储在静态内存中的,也就是不属于堆栈。
- 哪些是静态变量:所有的全局变量都是静态变量 、被关键字static修饰的局部变量也是静态变量
- 生命周期:静态变量在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束。
1 #include <stdio.h>
2
3 int a;
4
5 void test() {
6 static int b = 0;
7 b++;
8
9 int c = 0;
10 c++;
11
12 printf("b=%d, c=%d \n", b, c);
13 }
14
15 int main() {
16 int i;
17 // 连续调用3次test函数
18 for (i = 0; i<3; i++) {
19 test();
20 }
21
22 return 0;
23 }
运行结果:
3.3 寄存器变量(自动变量、局部变量)
-
定义:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存中的)。
-
哪些变量是寄存器变量:
①被关键字register修饰的自动变量都是寄存器变量。
②只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行。
③寄存器变量只限于int、char和指针类型变量使用 。
-
生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。
-
使用注意:
- 由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理。
- 为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存。
1 int main() {
2 register int a;//变量a是个寄存器变量。
3 return 0;
4 }
4、变量交换的方法
题目:
输入两个整数a和b,交换二者的值,然后输出。
分析:
先存入变量a和b,然后交换。方法如下:
4.1 空瓶法:
#include<stdio.h>
int main()
{
int a,b,t; //t相当于一个空瓶
scanf("%d%d",&a,&b);
t = a; //将a倒入空瓶t中
a = b; //再将b倒入a中
b = t; //最后将t倒入b中,从而实现了a和b的交换
printf("%d %d",a,b);
return 0;
}
4.2 和数法
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
a = a + b;
b = a - b;
a = a - b;
printf("%d %d",a,b);
return 0;
}
如果设a房间里放的数是A,b房间里放的数是B。则有:
a = A + B
b = A + B - B
a = A + B - ( A + B - B)
以此达到换房的目的。
4.3 直接输入法
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d",b,a);
return 0;
}
推荐使用空瓶法。
5、变量的命名(常用匈牙利命名法)
变量名属于标识符,需要符合标识符的命名规范,如下:
- 变量名的第一个字符必须是字母或下划线,不能是数字和其它字符。
- 变量名中的字母是区分大小写的。比如 a 和 A 是不同的变量名,num 和 Num 也是不同的变量名。
- 变量名绝对不可以是C语言关键字
6、关键字
关键字也称为保留字,共32个,也就是说这些单词在C语言中有特别的含义,程序员不能把它用于变量或函数的命名。
auto :声明自动变量
break:跳出当前循环
case:开关语句分支
char :声明字符型变量或函数返回值类型
const :声明只读变量
continue:结束当前循环,开始下一轮循环
default:开关语句中的“默认”分支
do :循环语句的循环体
double :声明双精度浮点型变量或函数返回值类型
else :条件语句否定分支(与 if 连用)
enum :声明枚举类型
extern:声明变量或函数是在其它文件或本文件的其他位置定义
float:声明浮点型变量或函数返回值类型
for:一种循环语句
goto:无条件跳转语句
if:条件语句
int: 声明整型变量或函数
long :声明长整型变量或函数返回值类型
register:声明寄存器变量
return :子程序返回语句(可以带参数,也可不带参数)
short :声明短整型变量或函数
signed:声明有符号类型变量或函数
sizeof:计算数据类型或变量长度(即所占字节数)
static :声明静态变量
struct:声明结构体类型
switch :用于开关语句
typedef:用以给数据类型取别名
unsigned:声明无符号类型变量或函数
union:声明共用体类型
void :声明函数无返回值或无参数,声明无类型指针
volatile:说明变量在程序执行中可被隐含地改变
while :循环语句的循环条件
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。