03 数据类型

数据类型

基本数据类型

short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。

C语言中,数据类型可分为

  1. 基本数据类型
  2. 构造数据类型
  3. 指针类型
  4. 空类型

数据类型分类

最常用的整型, 实型与字符型(char,int,float,double):

整型数据是指不带小数的数字(intshort intlong intunsigned int, unsigned short intunsigned long int):

注:

  • int short int long int根据编译环境的不同,所取范围不同。
  • 而其中short intlong int至少是表中所写范围, 但是int在表中是以16位编译环境写的取值范围。
  • 另外 c语言int的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。
  • ANSI标准定义int是占2个字节,TC是按ANSI标准的,它的int是占2个字节的。但是在VC里,一个int是占4个字节的。
16位编译器32位编译器64位编译器
char111
void*(指针变量)248
short int222
unsigned int244
int244
float444
double888
long448
unsigned long448
long long888

关键字

下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

关键字说明
auto声明自动变量
break跳出当前循环
case开关语句分支
char声明字符型变量或函数返回值类型
const定义常量,如果一个变量被 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循环语句的循环条件

变量与常量

C 中有两种类型的表达式:

  • 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式,即:命名标识符。左值可以出现在赋值号的左边或右边。
  • 右值(rvalue):指的是存储在内存中某些地址的数值,即:实际的数据值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量和常量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。

变量

变量其实就是一个有名字的数据项。或者说,变量表示一个具有名字的,具有特定属性的存储空间。在程序运行过程中该存储空间内的数据值可以被改变。习惯上,变量名使用小写字母表示,而大写字母常用于字符常量或自定义数据类型名。

变量具有下列三个要素:

  1. 变量名:内存入口地址
  2. 数据类型:决定了内存空间的大小
  3. 数据值:储存在内存空间中的数值

变量的类型

变量名由字母、数字和下划线字符组成。它必须以字母或下划线开头,大小写敏感。有以下几种基本的变量类型:

此外,C 语言也允许定义各种其他类型的变量,比如枚举指针数组结构共用体等等。

变量的声明

变量声明,向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明,当程序使用了一个没有被声明的变量名时候就会出现编译错误。

若只是声明定义了变量的数据类型,但却没有为变量赋予数据值,则变量所分配的内存单元中还保留着自上一次内存单元存储的旧数据。

变量的声明有两种情况

  1. 一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
  2. 另一种是不需要建立存储空间的,通过使用 extern 关键字声明了变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中进行定义的。
extern int i;    //声明,但不定义
int i;           //声明,也是定义

变量的定义

变量定义,就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。本质就是确定了内存地址的起始地址和内存空间大小。

不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。

int    i, j, k;
char   c, ch;
float  f, salary;
double d;

变量的初始化与赋值

同时完成变量的定义和初始化:把数值填充到内存空间。

extern int d = 3, f = 5;    // d 和 f 的声明与初始化
int d = 3, f = 5;           // 定义并初始化 d 和 f
byte z = 22;                // 定义并初始化 z
char x = 'x';               // 变量 x 的值为 'x'

变量的初始化本质就是与变量定义同时进行的第一次赋值,此外的都称之为赋值。

#include <stdio.h>
// 定义全局变量
int x;
int y;

int addtwonum(){
    // 声明使用全局变量
    extern int x;
    extern int y;
    // 为全局变量进行赋值
    x = 1;
    y = 1;
    return x + y;
}

int main(){
    int result;
    result = addtwonum();
    printf("result : %d", result);

    return 0;
}

变量的命名规则

  1. 命名应当直观且可以拼读,可望文知意,便于记忆和阅读
    标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。

  2. 命名的长度应当符合“min-length && max-information”原则
    C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉“元音”形成缩写。

  3. 当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写

    比如: int CurrentVal;
    这样的名字看起来比较清晰,远比一长串字符好得多。

  4. 量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的确需要编号。比如驱动开发时为管脚命名,非编号名字反而不好。
    初学者总是喜欢用带编号的变量名或函数名,这样子看上去很简单方便,但其实是一颗颗定时炸弹。这个习惯初学者一定要改过来。

  5. 对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名(缩写)作为范围限定符),如 GUI_ ,etc

注意,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必须使用相同的表示法,并且注明其意思。

常量

常量就像是常规的变量,常量是固定值,在程序执行期间不会改变,通常使用大写字母标识。

  • 整型常量:即整数
  • 浮点型常量:又称为实型常量,即小数,可使用小数或指数形式来表示
  • 字符型常量:即符号,用单引号括起来的一个字符,具有一般字符和转义字符两种类型
  • 字符串常量:即用双引号括起来的多个字符组成的字符序列
  • 符号常量:即对常量进行命名,所以字符常量即是常量名,使用 const 关键字或 #define 预处理器指令来定义

整型常量

整数常量可以是十进制、八进制或十六进制的常量,通过前缀来确定。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

85         /* 十进制 */
0213       /* 八进制 */
0x4b       /* 十六进制 */
30         /* 整数 */
30u        /* 无符号整数 */
30l        /* 长整数 */
30ul       /* 无符号长整数 */

浮点型常量

浮点型常量,又称实型常量,具有以下两种表示方式:

  • 小数形式:带小数点的常数。例如:21.290000。
  • 指数形式(科学计数法):由数符尾数(整数或小数)、阶码标志(E 或 e)、阶符和整数阶码组成的常数。例如:2.129000e+001。

NOTE:

  • 浮点型常量默认为双精度 double 类型。
  • 若浮点型常量以 F 或 f 结尾,表示该浮点型常量为单精度 float 类型常量。
  • 若浮点型常量以 l 或 L 结尾,表示该浮点型常量为 long double 类型常量。
3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指数 */
210f          /* 非法的:没有小数或指数 */
.e55          /* 非法的:缺少整数或分数 */

字符型常量

字符型(Char)常量:用单引号括起来,具有两种类型:

  • 一般字符常量:一个用单引号 ’ ’ 括起来的字符。
  • 转义字符常量:一个用单引号 ’ ’ 括起的,并以反斜杠 ‘’ 开头的字符,用于表示具有特殊功能的字符。

字符型常量占用 1Byte 内存空间,以 ASCII 码形式(即整型)存储。 因此,字符型数据对象和整型数据对象是可相互转换的。

常见字符的ASCII码值如下

SCII值为8、9、10 和13 分别转换为退格制表换行回车字符。

  • 退格的ASCII码值为8
  • 制表的ASCII码值为9;
  • 换行的ASCII码值为10;
  • 回车的ASCII码值为13;
  • 空格的ASCII码值为32;
  • 数字09的ASCII码值分别为48~57
  • 大写字母A”到“Z”的ASCII码值分别为65~90
  • 小写字母a”到“z”的ASCII码值分别为97~122

转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限

  • 八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177
  • 十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\7f

转义序列表

转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT)009
\v垂直制表(VT)011
'单引号039
"双引号034
\反斜杠092
\ddd八进制形式的转义字符;最多后跟三个数字127
\xdd十六进制形式的转义字符;最多后跟两个数字127

字符串常量

字符串(String)常量:一个用双引号 " " 括起来的字符串,可以保存多个字符(e.g. “abc”)。

字符串常量中的字符序列在内存中连续存储,并在最后面加上转义字符 ‘\0’ 作为字符串结束标志,字符 ‘\0’ 占用 1Byte 内存空间。 例如:字符串 “HELLO” 在内存实际占据 6Bytes,实际字符存放顺序为 ‘H’、‘E’、‘L’、‘L’、‘O’、’\0’。

下面的实例显示了一些字符串常量。下面这三种形式所显示的字符串是相同的。

"hello, dear"

"hello, \
dear"

"hello, " "d" "ear"

符号常量

使用符号来作为常量的标识,所以也叫常量名。

符号常量具有两种定义方式:

define

使用 #define 预处理器定指令义常量的形式,不需要声明常量的数据类型#define 符号常量名 常量表达式;

#include <stdio.h>
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'
 
int main()
{
 
   int area;  
  
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}
#define使用中的常见问题解析
1. 简单宏定义使用中出现的问题

例1:

#define N 2+2
void main()
{
   int a=N*N;
   printf(“%d”,a);
}
上述问题的计算为 2+2*2+2,并不是(2+2)*(2+2)

(1) 问题解析:

如1节所述,宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏N出现的地方 只是简单地使用串2+2来代替N,并不会增添任何的符号,所以对该程序展开后的结果是a=2+2*2+2,计算后=8,这就是宏替换的实质,如何写程序才能完成结果为16的运算

(2)解决办法:

//将宏定义写成如下形式
#define N (2+2)
//这样就可替换成(2+2)*(2+2)=16
2 带参数的宏定义出现的问题 (非常重要!)

在带参数的宏定义的使用中,极易引起误解。例如我们需要做个宏替换能求任何数的平方,这就需要使用参数,以便在程序中用实际参数来替换宏定义中的参数。一般容易写成如下形式:

#define area(x) x*x
/*这在使用中是很容易出现问题的,看如下的程序*/
void main()
{
    int y = area(2+2);
    printf(“%d”,y);
}

按理说给的参数是2+2,所得的结果应该为4*4=16,但是错了,因为该程序的实际结果为8,仍然是没能遵循纯粹的简单替换的规则,又是先计算再替换 了。

在这道程序里,2+2即为area宏中的参数,应该由它来替换宏定义中的x,即替换成2+2*2+2=8了。那如果遵循(1)中的解决办法,把2+2 括起来,即把宏体中的x括起来,是否可以呢?#define area(x) (x)*(x),对于area(2+2),替换为(2+2)*(2+2)=16可以解决

但是对于area(2+2)/area(2+2)又会怎么样呢,当一看到这道题马上给出结果,因为分子分母一样,又错了,还是忘了遵循先替换再计算的规则了,这道题替换后会变为 (2+2)*(2+2)/(2+2)*(2+2)4*4/4*4按照乘除运算规则,结果为16/4*4=4*4=16解决方法是在整个宏体上再加一个括号,即#define area(x) ((x)*(x)),不能觉得这没必要,没有它就出错 

如果是自己编程使用宏替换,则在使用简单宏定义时,当字符串中不只一个符号时,加上括号表现出优先级,如果是带参数的宏定义,则要给宏体中的每个参数加上括号并在整个宏体上再加一个括号

计算 “乘法” 的宏

#include <stdio.h>

#define MUL(a) ((a) * (a) * (a))fffffff

int main(int argc, char *argv[])

{

    int i = 10;
    int sum = MUL(i);
    printf("MUL(%d) = %d\n", i, sum);
    return 0;
}

上面程序的这种做法对于非负数而言那就是没有问题的,比如,程序中的 变量 i=10

调用宏得到的数据如下:

MUL(10)=1000

但是如何变量的数值是自加或者自减的操作的话,结果就不一样了

说明:
  1. 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。 
  2. 宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
  3. 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用# undef命令
  4. 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。
  5. 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。
  6. 习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。
  7. 可用宏定义表示数据类型,使书写方便。如:#define STU struct stu 在程序中可用STU作变量说明:STU body[5],*p;
  8. 对“输出格式”作宏定义,可以减少书写麻烦

const

使用 const 关键字声明指定类型的常量:const 数据类型 符号常量名 = 常量表达式;

#include <stdio.h>
 
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}

NOTE

  • 使用 const 方式定义符号常量时,必须初始化符号常量
  • 在程序运行过程中,不能修改符号常量的数据值
  • 符号常量名一般用大写字母表示
  • 符号常量定义中的常量表达式不能含有变量或函数
两者的区别

(1) 编译器处理方式不同

  • #define 宏是在预处理阶段展开。
  • const 常量是编译运行阶段使用。

(2) 类型和安全检查不同

  • #define 宏没有类型,不做任何类型检查,仅仅是展开。
  • const 常量有具体的类型,在编译阶段会执行类型检查。

(3) 存储方式不同

  • #define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。)
  • const常量会在内存中分配(可以是堆中也可以是栈中)。

(4) const 可以节省空间,避免不必要的内存分配。 例如:

#define NUM 3.14159 //常量宏
const doulbe Num = 3.14159; //此时并未将Pi放入ROM中 ......
double i = Num; //此时为Pi分配内存,以后不再分配!
double I= NUM; //编译期间进行宏替换,分配内存
double j = Num; //没有内存分配
double J = NUM; //再进行宏替换,又一次分配内存!

const 定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象 #define 一样给出的是立即数,所以,const 定义的常量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态区),而 #define 定义的常量在内存中有若干个拷贝。

(5) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

(6) 宏替换只作替换,不做计算,不做表达式求解;

(7)define可以定义函数,const不可以

作用域

所谓作用域(Scope),就是变量的有效范围。C 语言中所有的变量都有自己的作用域,决定变量作用域的是变量的定义位置。

  • 局部变量(Local Variable):定义在函数内部的变量称为局部变量,包括函数形参变量。实参给形参传值的过程也就是给局部变量赋值的过程。
  • 全局变量(Global Variable):它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。

注:局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会优先使用局部变量值,全局变量不会被使用。

全局变量与局部变量在内存中的区别:

  • 全局变量保存在内存的全局存储区中,占用静态的存储单元;
  • 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
  • 当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化。
数据类型初始化默认值
int0
char'\0'
float0.0||0
double0.0||0
pointerNULL

注:正确地初始化变量是一个良好的编程习惯。

float f1=0.0;    //常用
float f2=0;      //不常用

如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的源文件中将变量加上 extern 关键字的声明即可。如下例:

  • addtwonum.c
#include <stdio.h>

extern int x;
extern int y;

int addtwonum(){
    return x + y;
}
  • main.c
#include <stdio.h>

int x=1;
int y=1;

int addtwonum();

int main(){
    int result;
    result = addtwonum();
    printf("result : %d", result);

    return 0;
}

运行

result : 2

注意,因为 C 语言代码是从前往后依次执行的,所以全局变量通常位于源文件的顶部。

int a, b;  //全局变量
void func1(){
    //TODO:
}
float x,y;  //全局变量
int func2(){
    //TODO:
}
int main(){
    //TODO:
    return 0;
}

a、b、x、y 都是在函数外部定义的全局变量。由于 x、y 定义在函数 func1() 之后,所以在 func1() 内无效;而 a、b 定义在源程序的开头,所以在 func1()、func2() 和 main() 内都有效。

存储类

存储类定义了 C 程序中的变量/函数的作用域和生命周期,通过特殊的修饰符(关键字)来进行修饰不同的变量/函数,使得他们具有灵活的作用域。下面列出 C 程序中可用的存储类:

  • auto
  • register
  • static
  • extern

auto 修饰符

auto 存储类是所有局部变量默认的存储类。auto 只能用在函数内,即 auto 只能用于修饰局部变量。

下述实例定义了两个具有相同存储类的变量:

{
   int mount;
   auto int month;
}

register 修饰符

register 存储类用于定义存储在寄存器中而不是内存中的局部变量。这意味着变量的最大 Size 等于寄存器的 Size,且不能对它应用一元运算符 ‘&’ (因为它没有内存空间)。

寄存器只用于需要快速访问的变量,比如:计数器。还应注意的是,使用了 register 修饰符进行修复并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。

{
   register int  miles;
}

static 修饰符

被 static 修饰的变量和常量被称为 静态变量 或 静态常量。

  • 用于修饰局部变量时:编译器在程序的生命周期内保持局部变量的存在,不会在每次进入和离开函数的时候对局部变量进行重新的创建和销毁(重新赋值)。因此,使用 static 修饰局部变量可以在函数调用之间保持住局部变量的值不被重置。
  • 用于修饰全局变量时:会使变量的作用域限制在声明它的源文件内,而不再是整个程序。
#include <stdio.h>
 
/* 函数声明 */
void func1(void);
 
static int count=10;        /* 全局变量 - static 是默认的 */
 
int main()
{
  while (count--) {
      func1();
  }
  return 0;
}
 
void func1(void)
{
/* 'thingy' 是 'func1' 的局部变量 - 只初始化一次
 * 每次调用函数 'func1' 'thingy' 值不会被重置。
 */                
  static int thingy=5;
  thingy++;
  printf(" thingy 为 %d , count 为 %d\n", thingy, count);
}

运行:

thingy 6, count 9
thingy 7, count 8
thingy 8, count 7
thingy 9, count 6
thingy 10, count 5
thingy 11, count 4
thingy 12, count 3
thingy 13, count 2
thingy 14, count 1
thingy 15, count 0

可见,静态变量 thingy 不会在每次函数调用时重置。

extern 修饰符

extern 存储类用于提供一个全局变量/函数的引用。全局变量/函数的作用域是整个程序,当你在一个源文件中想引用另外一些源文件中定义的全局变量/函数时,你可以在该源文件中使用 extern 修饰符,修饰一个全局变量/函数,而且不需要进行初始化(因为该全局变量实际上在另一个源文件中已经完成了初始化)。

简而言之,extern 修饰符就是用与在一个文件中,对另外一个完全中的全局变量或函数进行声明(但不定义),向编译器保证该变量/函数的存在(即便变量/函数的定义并不在本文件中)。

  • main.c
#include <stdio.h>
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}
  • support.c
#include <stdio.h>
 
extern int count;
 
void write_extern(void)
{
   printf("count is %d\n", count);
}

ASCII 码表

二进制十进制十六进制字符/缩写解释
00000000000NUL (NULL)空字符
00000001101SOH (Start Of Headling)标题开始
00000010202STX (Start Of Text)正文开始
00000011303ETX (End Of Text)正文结束
00000100404EOT (End Of Transmission)传输结束
00000101505ENQ (Enquiry)请求
00000110606ACK (Acknowledge)回应/响应/收到通知
00000111707BEL (Bell)响铃
00001000808BS (Backspace)退格
00001001909HT (Horizontal Tab)水平制表符
00001010100ALF/NL(Line Feed/New Line)换行键
00001011110BVT (Vertical Tab)垂直制表符
00001100120CFF/NP (Form Feed/New Page)换页键
00001101130DCR (Carriage Return)回车键
00001110140ESO (Shift Out)不用切换
00001111150FSI (Shift In)启用切换
000100001610DLE (Data Link Escape)数据链路转义
000100011711DC1/XON (Device Control 1/Transmission On)设备控制1/传输开始
000100101812DC2 (Device Control 2)设备控制2
000100111913DC3/XOFF (Device Control 3/Transmission Off)设备控制3/传输中断
000101002014DC4 (Device Control 4)设备控制4
000101012115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收
000101102216SYN (Synchronous Idle)同步空闲
000101112317ETB (End of Transmission Block)传输块结束/块传输终止
000110002418CAN (Cancel)取消
000110012519EM (End of Medium)已到介质末端/介质存储已满/介质中断
00011010261ASUB (Substitute)替补/替换
00011011271BESC (Escape)逃离/取消
00011100281CFS (File Separator)文件分割符
00011101291DGS (Group Separator)组分隔符/分组符
00011110301ERS (Record Separator)记录分离符
00011111311FUS (Unit Separator)单元分隔符
001000003220(Space)空格
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927'
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C\
01011101935D]
01011110945E^
01011111955F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C|
011111011257D}
011111101267E~
011111111277FDEL (Delete)删除

转义序列表

转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT)009
\v垂直制表(VT)011
'单引号039
"双引号034
\反斜杠092
\ddd八进制形式的转义字符;最多后跟三个数字127
\xdd十六进制形式的转义字符;最多后跟两个数字127
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值