【C++学习之路】| C语言篇 | 003 常量与变量

第三章 常量与变量



前言

在整个程序的运行过程中,没有变化且不能变化的,我们称之为常量
在程序运行期间,可以改变并且有可能会改变的,我们称之为变量


1、常量及常量的类型

常量即常数,表示固定的值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型。

  1. 字符常量 如’6’,‘a’,‘F’(不能是中文,例如:‘男’,因为一个汉字和全角的符号占两个字节。)
  2. 整型常量 如6,27,-299
  3. 浮点型常量 如5.43,-2.3,5.67,6.0
  4. 字符串常量 如"625",“女”,“nanabc”,“西施”
  5. 枚举常量

注:前缀指定基数:

  1. 0x 或 0X 表示十六进制;
  2. 0 表示八进制;
  3. 不带前缀则默认表示十进制。

1.1 字符常量

字符常量是括在单引号中,例如,‘x’ 可以存储在char 类型的简单变量中。字符常量可以是一个普通的字符(例如 ‘x’)、一个转义****字符(例如 ‘\t’),或一个通用的字符(例如 ‘\u02C0’)。在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。

1、转义字符的含义:

  1. \ \ 字符
  2. ’ ’ 字符
  3. " " 字符
  4. ? ? 字符
  5. \a 警报铃声
  6. \b 退格键
  7. \f 换页符
  8. \n 换行符
  9. \r 回车
  10. \t 水平制表符
  11. \v 垂直制表符
  12. \ooo 一到三位的八进制数
  13. \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 、变量及变量的类型

在程序运行期间,可以改变并且有可能会改变的,我们称之为变量

变量的类型:

  1. 全局变量
  2. 局部变量
  3. 静态变量
  4. 常变量

2.1 全局变量

global variables

1、作用范围:

  1. 定义在所有函数体外;
  2. 全局变量不初始化将自动赋值为0;
  3. 全局变量的作用域是从定义行开始的,到文件结束;

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 静态变量

  1. 定义:静态变量是存储在静态内存中的,也就是不属于堆栈。
  2. 哪些是静态变量:所有的全局变量都是静态变量 、被关键字static修饰的局部变量也是静态变量
  3. 生命周期:静态变量在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束。
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 寄存器变量(自动变量、局部变量)

  1. 定义:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存中的)。

  2. 哪些变量是寄存器变量:

    ①被关键字register修饰的自动变量都是寄存器变量。

    ②只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行。

    ③寄存器变量只限于int、char和指针类型变量使用 。

  3. 生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。

  4. 使用注意:

  • 由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理。
  • 为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存。
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、变量的命名(常用匈牙利命名法)

变量名属于标识符,需要符合标识符的命名规范,如下:

  1. 变量名的第一个字符必须是字母或下划线,不能是数字和其它字符。
  2. 变量名中的字母是区分大小写的。比如 a 和 A 是不同的变量名,num 和 Num 也是不同的变量名。
  3. 变量名绝对不可以是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提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值