C语言的变量与常量 字符字符串与转义字符详解
作者:HAORANCHIDOUZI
一.变量
1.1定义变量的方法
如图中所示,变量可被定义为各种数据类型,如int 整型 char字符数据类型,short短整型,float单精度浮点数,double双精度浮点数等等。一般在变量定义后,需给变量赋值,如图中对所有变量给与了0的赋值,这也是一个良好的代码习惯。
1.2变量的分类
变量分为局部变量和全局变量。
局部变量:定义在代码块内部的变量,一个大括号中所有代码便是一个代码块,局部变量只在代码块中存在和生效,如下图中这种情况
变量被定义a和第一个输出函数printf在同一个代码块中,所以输出函数可以成功的输出代码a的值0。但变量b被定义的代码块和第二个输出函数printf不在同一个代码块中,变量b只在其被定义的代码块中存在,在第二个输出函数printf所在的代码块中不存在,所以编译器会报错,未定义标识符b。
如果是上图这种情况,变量a的值是可以被输出的,因为输出函数printf仍在变量a所在的这个整体的代码块(大括号之中)。
如上的变量a与变量b,被定义在某一个代码块中的变量,即为局部变量。
全局变量:被定义在代码块之外的变量,但要保证在#include<stdio.h>之后才定义,作用域为全体范围,整个程序的作用域该变量均存在。
如上图该程序的输出结果为10。但当代码块中出现和全局变量同名的变量时,全局变量的值会被覆盖,如下图。会将代码块中局部变量的值覆盖全局变量的值,但仅在该代码块中起到这样的效果,如果其它代码块中没有和全局变量同名的局部变量,仍以全局变量的值为该变量的值。
1.3变量的使用
先定义变量,然后变量可以参加加减乘除等运算,也可以使用printf输出函数打印该变量的值,或者使用scanf输入函数,从外部输入对该变量进行赋值。
输入该变量的值时候,要在该变量前面加&符号,&符号的意思是取地址,又叫取地址符号。
二.常量
C语言中常量分为字面常量(包括字符常量,const 修饰的常变量,#define定义的标识符常量,枚举常量四种常量。
2.1字面常量
字面常量即用数字和字符组成的常量,如下图所示。
2.2 const修饰的常变量
如上图所示,对在定义一个变量的时候在前面加上const代表该变量是不可修改的。但该变量本质上还是作为一个变量存在,又被称为常变量。例如在定义数组的时候只能使用常量,假如使用了const修饰的常变量,大部分编译器会报错(因为在C99标准之前,变长数组,不允许用变量指定数组大小)。如下图所示,定义数组大小只可以用常量!!
2.3#define定义的标识符常量
如上图所示可以用#define+常量名+具体大小的形式定义标识符常量,上图的MAX便是这么定义的,在代码习惯中一般用大写字母。
2.4 枚举常量
枚举的意思是可以一一列举,如生活中的性别(男性和女性),人种(黄种人,白种人和黑种人),这样种类比较少的常量可以用枚举类型,作为枚举常量。
定义枚举类型的时候如上图所示,枚举这种类型可能的取值就是枚举常量。枚举常量和枚举常量之前用逗号隔开,所有的枚举常量被放在一个大括号中,在该大括号的末尾用分号作为结束。
三.字符和字符串
3.1 定义
由单引号引起的单个字符或者字母被成为字符,如'a' 'b'均为字符,由双引号引起的一串字符被成为字符串如"abc" "sfc"都被成为字符串,""也是字符串的一种,被成为空字符串。如下图所示,'a' '#'为字符,"abc","a","",均为字符串。
3.2字符串的应用
可以将字符串放在在字符数组中,如定义一个字符数组 char arr1[]="abc";这里的arr为该字符数组的名称。但不能将字符串放在一个变量中,如char ch="abc";这样的形式是错误的。
字符串还可以用strlen函数去计算长度,但在使用strlen计算字符串长度之前,去引用头函数#include<string.h>。在计算字符串长度的时候每一个字符是1长度,但转义字符也是一个字符,整体算一个长度。在用strlen函数计算长度的时候'\0'为终止的位置,字符串后自带一个'\0',字符后需要人为添加'\0',否则在计算字符长度的时候,会一直到内存中出现'\0'的时候才会停止,这样的话字符的长度便成为了一个随机数,显然是不行的,所以要人为添加'\0'。
常用的转义字符如上图,\ddd的意识为后面跟一个,两个或者三个8以下的数字时,需要将整体八进制转换为十进制,再根据ASCII码值输出ASCI码值对应的字符。\xdd的意思为后面\x跟着两个十六进制的数字,整体为一个转义字符,将十六进制的转化为十进制,再输出其对应的字符。
3.3转义字符
即在C语言中,有时间一些字符的意思可能被编译器曲解,所以这时候需要用转义字符来转变原来的意思,得到我们想要的意思。
例如在上图中,我们想要打印test.c这个文件的位置,但结果缺不尽人意,因为两个\t被识别为转义字符,意识是缩进四格。\104被识别为\DDD的形式,104被当作一个八进制的数字,在转化为十进制的数后输出了其ASCII码值对应的字符——大写字母D。举例,如下图所示\DDD和\XDD的情况。
如上图所示,\DDD先将其转化为十进制,\071转化为十进制是57,而57对应的ASCII值对应的字符为9,所以打印输出了9.\XDD同理先将转化为十进制,\x62转化为10进制是98,而98对应的ASCII值对应的字符为b。故printf函数打印了小写字母b。
如果不想造成上上上图的困扰,正确的打印该文件在计算机中的存储位置,这时候就需要在每个\再加一个\,对其进行转移,便能正确输出了,如下图所示。
四.注释
注释分为C注释方式和C++注释方式。//C99之后引入的注释方式 ---> C++的注释风格/* C99之前C语言的注释方式 --> C的注释风格, 缺陷是不支持嵌套注释*/
上图为C语言的注释风格,缺陷是不能进行嵌套注释,会在遇到第一个*/时候注释停止。
上图是C++语言的注释风格,//后整行皆为注释内容,也是现在比较流行的注释方式。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!