程序中的变与不变——常量和变量

目录

1.标识符

2.关键字

3.常量

1、整数常量

2、浮点常量

3、字符常量

4、字符串常量

5、符号常量

 4、变量

1、变量的定义

2、变量的声明

3、变量的初始化与赋值

4、变量的分类


在对变量和常量了解之前,先了解什么是标识符和关键字。

1.标识符

标识符是用来标识类、变量、函数或任何其他用户定义的项目。

在C语言中,命名标识符必须遵循以下规则:

1.)标识符以字母、数字、下划线组成,但不可以以数字开头。

2.)标识符不包含空格或任何符号,但可以使用下划线。

3.)标识符不能是C语言的关键字。

2.关键字

C语言中的32位关键字与定义
        关键字                                  定义
           void声明函数无返回值或无参数,声明空类型指针
           char声明字符串变量
           short声明短整型变量
             int 声明整形变量
            long声明长整形变量
            float声明浮点型变量
          double声明双精度型变量
          sizeof计算对象所占内存空间的大小
          signed声明有符号类型变量
        unsigned声明无符号类型变量
          struct声明结构体变量
          union声明联合数据类型变量

          enum

声明枚举类型
        typedef给数据类型取别名
          auto声明自动变量,缺省时编译器一般默认为auto
          static

声明静态变量

          extern声明变量在其他文件中声明,亦引用变量
         register声明寄存器变量
          const声明只读变量
        volatile声明程序在执行中可被隐含的改变
              if条件语句
            else条件语句的否认分支,与if连用
            for一般循环语句
          while循环语句的循环条件
            do循环语句的循环体
         break跳出当前循环
          goto无条件跳转语句
       continue结束当前循环,开始下一轮循环
         return 子程序返回语句,可以带参数,也可以不带
         switch用于开关语句
          case开关语句分支
        default开关语句中的其他分支

个别术语介绍

自动变量:指的是局部作用域变量,具体来说即是在控制流进入变量作用域时系统自动为其分配存空间, 并在离开作用域时释放空间的一类变量

存储类:是C语言与C++语言的标准中,变量与函数的可访问性(即作用域范围)与生存期

寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。

​ 计算机中的数据可以存储到:寄存器,高速缓存器,内存,硬盘,网盘

​ (以上存储从左到右按照,内存越来越大,造假越来越低,传输速度越来越慢排序)


1、auto:声明自动变量,一般都省略

​ 默认情况下,在代码块内声明的变量都是自动变量,但亦可用自动变量的关键字auto明确标识存储类

int a=0;
//上下两个代码其实相同,只是上边省略了auto
auto int a=0;

2、register:声明寄存器变量

​ 这个关键字定义变量后,会请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻 址访问,以提高效率。(因为寄存器很小,如果定义了很多register变量,可能会超过CPU的寄存 器个数,超过容量,故变量不是一定会存入寄存器内)

3、signed和unsigned

signed:有符号的(一般定义常量默认为signed)-------可以存储正数和负数

unsigned:无符号的-----不能存储负数

signed int a=0;//一般默认为signed 类型,所以只需要写成:int a=0;
unsigned float a=-13.4;//错误定义,un代表无符号 
float a=-13.4;//正确定义
signed float a=-13.4;

4、typedef:类型重定义-------一般对于太过复杂的数据类型,可以重新定义一个简单的或有辨识度的使用

​ typedef <数据类型> <自己取的类型名>

unsigned long int a=10;//数据类型过于复杂,可以使用typedef进行重定义
typedef unsigned long int u-l-int;
u-l-int a=10;//与首行代码一致

5、extern:用在变量或者函数的声明前,用来说此变量/函数是在别处定义的,要在此处引用

​ 默认情况下全局变量只能在定义它的文件中使用(从定义该全局变量开始到所在文件的文件尾), 但如果在另一个文件中将这个变量声明为外部变量,那么这个变量的作用域将被扩展到另外一个文件中。你只需要在引用它的文件中在它的数据类型前加extern 那么你就可以使用他。

#include <stdio.h>
int main()
{
    int a=10;
    return 0;
} 
#include <stdio.h>
int main()
{
    extern int a;
    printf("%d",a);
    return 0;
}

这是两个文件里的代码,而第二个代码会输出10;a是在第一个文件中定义和初始化的,在第二个文件中使用extern 来声明变量a,不需要再开辟空间。

3.常量

常量——值不会发生变化的量。这些固定的值,又称为字面量。

1、整数常量

可以分为十进制、八进制或十六进制,前缀为0,表示八进制;前缀为0X或0x,表示十六进制;不带前缀默认十进制。

八进制:

由0~7组成,例如:

a=0123;
b=0457;

十六进制:

由0~9和A~F组成,A代表10,以此类推,F代表15。

十六进制整数常量的表示中A~F可以为大写,也可以为小写

无符号整数常量:

使用u或者U作为后缀,例如

a=123u;
b=234U;

长整形:

使用l或L作为后缀,例如

a=123l;
b=234L;

当常量既是无符号型也是长整型时,U和L的先后顺序任意

2、浮点常量

由整数部分、小数点、小数部分和指数部分组成,通常情况下,浮点常量可以使用小数形式或者指数形式来表示。

小数形式:

使用小数表示浮点常量时,必须包含整数部分、小数部分,或同时包含两者。例如:

PI=3.14159;
r=.62;//表示0.62

注意:小数点前后的0都是可以省略的,但是不可以同时省略

指数形式:

使用指数形式表示浮点常量时,必须包含小数点、指数,或同时包含两者。指数跟在E或e后边。

这里e代表的是10;

​
PI=314.159e-2;//就表示3.14159
r=0.026E2;//表示2.6

​

3、字符常量

C语言中的字符分为两类:普通字符(如'a','b'等)和转义字符。

字符常量存储在计算机的存储单元时,是以其代码的ASCII值来存在的。

1、普通字符常量

使用单撇号(' ')括起一个字符的书写形式即为字符常量。书写字符常量使应注意以下几点:

1.)字符常量只能用单撇号括起来,不能用其他符号;

2.)字符常量中只能包括一个字符,不能是字符串,如'abc'是错误的;

3.)字符串常量区分大小写,'a'和'A'是两个不同的字符(因为其ASCII码值是不同的);

4.)单撇号只是界限符,不属于字符常量的一部分,字符常量不包含单撇号在内;

5.)单撇号内可以是数字、字母等C语言字符串集中除" ' "和" \ "以外的单个字符,但是数字被定义为字符后不再能参加数值的各种运算。

2、转义字符

转义字符由一个反斜杠" \ "加上一个字符或者代码来表示,其含义是把反斜杠后的字符转义为其他意义。

常见的转义字符及其含义

         字符形式

                      含义
\x20空字符
\n换行键
\t回车键
\v垂直制表符
\a响铃
\b退格符
\f换页符
\'单引号
\"双引号
\\反斜杠
\?问号字符
\0001到3位八进制数所代表的任意字符
\xhh1到2位十六进制数所代表的任意字符

转义字符主要是用来显示特殊符号或控制输出格式。

知道了这个我们就可以解决打印 \ 的问题,

 很明显,这样是打印不出来我们想要的 \ 的,那么我们应该怎么做呢?

通过上边的转义字符的图,我们发现只需要在它的前面再加上一个 \ 就可以了,原因是单个 '\'字符编译器会觉得是转义字符,所以它不会打印,而'\\'时第一个是转义字符,它使第二个转义字符 \ 转义为我们想要的反斜杠。

4、字符串常量

字符串常量是用双括号括起来的,在C语言中系统会自动在每个字符串的最后加上一个"\0"作为结束的标志。

如图,我用sizeof去计算字符串a的长度,结果不是我预估的7,而是8。这是因为它结尾的\0也被计算在内。所以在计算字符串长度时,要记得+1;

字符常量与字符串常量的区别:

1.)定界符不同,字符常量用单引号,字符串常量用双引号;

2.)存储长度不同,字符'a'与字符串"a"相比,前者长度为1,而后者为2;

3.)字符常量可以用其ASCII码值进行加减运算,而字符串常量不可以;

5、符号常量

在C语言中,通常使用一个标识符来表示一个常量,这样的常量称为符号常量。它的特点是:再定义后用于代码的编写中,不可被寻址,不可更改赋值,它属于指令的一部分。

  

符号常量的定义方法通常使用以下方法:

#define 标识符 常量

其中#define 是一条预处理命令(预处理命令都以“#”开头),也可以称为宏定义命令,它位于主函数 main 函数之前,功能是把该标识符定义为其后的常量值,习惯上符号常量的标识符用大写字母表示,变量标识符用小写字母表示,以示区别。

符号常量一经定义,以后在程序中所有出现该符号变量标识符的地方均代之以该常量值。

使用符号常量可使程序的可读性大大提高,并且便于程序的修改和调试,并且使用符号常量方便输入,含义清晰。

 4、变量

与常量有很多相通点,就多了个数值可以改变。

在程序运行过程中,其值可以改变的量称为变量。它具有名称、类型、值,类型决定了它所代表的内存大小,变量值是指它所代表的存储在内存中的数据,就是我们赋给它的值。

1、变量的定义

对变量进行定义就是告诉编译器去哪里创建变量的内存,以及如何去创建这个变量的内存。

定义变量的语法为:

数据类型 变量名 ;

变量名可以由一个或多个标识符名称组成,多个标识符之间用逗号进行分割。

int a,b,r;
char name;
float PI;

2、变量的声明

使用变量前首先要声明变量,也就是指明变量的类型和名称。声明变量后,就可以把他们用作存储单元来存储声明时指定的数据类型数据。只能先声明后定义。

#include <stdio.h>
/*声明变量*/
extern int sun;
int main ()
{
    /*定义变量*/
    int sum;
    return 0;
}

   

3、变量的初始化与赋值

变量在使用前必须进行初始化,之后可以多次更改它的值,也叫做对变量进行赋值操作。

在对变量定义的同时赋予它初值叫做变量的初始化,表现形式如下:

数据类型 变量=值;

例如 int a=0,b=1;

注意:在初始化的过程中不允许进行连续赋值的操作,例如 "int a=b=c=1;"是不合法的

与变量的初始化不同,赋值符“=”右边也可以是另一个赋值语句,

如a=b=c=1;

它就等同于:

c=1;

b=c;

a=b;

4、变量的分类

C语言中,变量类型一般可以分为整型变量、实型变量和字符型变量。

1.)整型变量

整型变量用来存储整形数值,分为有符号基本整形,无符号基本整形,有符号短整型,无符号短整型,有符号长整型和无符号长整型。

基本整形和长整形在内存中占4个字节,而短整型占2个字节。

有无符号影响的是数值的取值范围,无符号是从0开始。

2.)实型变量

又称为浮点型变量,根据精度可分为单精度、双精度和长双精度类型3种。

单精度占4个字节的内存;

双精度占8个字节的内存;

长双精度占8个字节的内存;

3.)字符型常量

字符型常量是将一个字符常量存储到字符型变量中的变量,就是给一个字符型的变量赋了一个字符。它的存储是将字符的ASCII码值存储到内存空间中。

字符型变量占1个内存空间。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值