目录
在对变量和常量了解之前,先了解什么是标识符和关键字。
1.标识符
标识符是用来标识类、变量、函数或任何其他用户定义的项目。
在C语言中,命名标识符必须遵循以下规则:
1.)标识符以字母、数字、下划线组成,但不可以以数字开头。
2.)标识符不包含空格或任何符号,但可以使用下划线。
3.)标识符不能是C语言的关键字。
2.关键字
关键字 | 定义 |
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 | 换页符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\? | 问号字符 |
\000 | 1到3位八进制数所代表的任意字符 |
\xhh | 1到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个内存空间。