文章目录
前言
变量和常量是程序处理的两种基本数据对象。声明语句说明变量的名字和类型,也可以指定变量的初值。运算符指定将要进行的操作。表达式把变量和常量组合生成新的值。对象的类型决定改对象可取值的集合以及对该对象执行的操作。
一、标识符
标识符就是变量、函数、类型等的名字。
标识符由大小写字母、数字、下划线组成,但不能以数字开头。
C语言是一种大小写敏感的语言,abc、Abc、ABC 是不同的标识符。
标识符的长度没有限制,但标准允许编译器忽略31个字符以后的字符。
C语言的关键字是被保留的,它们是不能作为标识符使用:
do | while | for | case | default |
switch | if | else | break | continue |
goto | int | short | long | char |
float | double | signed | unsigned | struct |
union | enum | const | static | auto |
extern | register | volatile | void | typedef |
sizeof | return |
二、数据类型
1.数据类型分类
常用数据类型分类如下,其中带*是C99标准新增加的。
基本类型和枚举类型变量的值都是数值,统称为算术类型。算术类型和指针类型统称为纯量类型,因为它的变量值是以数字来表示。枚举类型是程序中用户定义的整数类型。
数组类型和结构体类型统称为组合类型,共用体不属于组合类型,因为在同一时间内只有一个成员具有值。
函数类型用来定义函数,描述一个函数的接口,包括函数返回值得数据类型和参数的类型。
不同的数据类型所占用的内存大小不一样,可以通过sizeof运算符获得,基本语法规则如下:
sizeof(数据类型名称);或sizeof(变量名称);
2.各数据类型的表示范围
(1)整型类型
整型类型包括字符(char)、短整型 ( short int )、整型 ( int )和长整型(long int),它们都分为有符号(signed)和无符号(unsigned)两种版本。
其中长整型至少应该和整型一样长,而整型至少应该和短整型一样长。
char | 0~127 |
signed char | -127~127 |
unsigned char | 0~255 |
short int | -32767~32767 |
unsigned short int | 0~65535 |
int | -32767~32767 |
unsigned int | 0~65535 |
long int | -2147483647~2147483647 |
unsigned long int | 0~4294967295 |
short int至少16位,long int 至少32位,缺省的int 究竟是16位还是32位,或其他值由编译器设计者决定。
在头文件limits.h中说明了各种不同整型类型的特点。
signed | unsigned | ||
类型 | 最小值 | 最大值 | 最大值 |
char | SCHAR_MIN | SCHAR_MAX | UCHAR_MAX |
short int | SHRT_MIN | SHRT_MAX | USHRT_MAX |
int | INT_MIN | INT_MAX | UINT_MAX |
long int | LONG_MIN | LONG_MAX | ULONG_MAX |
(2)浮点型
浮点数包括单精度(float)、双精度(double)、拓展精度(long double)等类型。
在头文件float.h中说明了各种不同浮点型类型的特点。
类型 | 最小值 | 最大值 |
float | FLT_MIN | FLT_MAX |
double | DBL_MIN | DBL_MAX |
long double | LDBL_MIN | LDBL_MAX |
浮点数字面值在缺省情况下都是double类型,除非它的后面跟一个L或l表示long double类型,或跟一个F或f表示float类型的值。
三、常量和变量
1.常量的概念
常量又称常数,是指在程序运行过程中其值不可改变的量。C语言中的常量可以分为整型常量、实型常量、字符型常量、字符串常量和符号常量。
(1)整型常量
整型常量又称整数。C语言中,整数有三种形式表示:十进制、八进制、十六进制整数。
(2)实型常量
实型也称浮点型,实型常量又称浮点数或实数。它有两种形式表示:十进制小数和指数形式。
(3)字符型常量
它有两种形式:普通字符和转义字符
- 普通字符:用单引号括起来的单个字符,如'a'、'B'、'3'、'?'等。字符常量存储在内存中,并不是存储字符本身,而是存储其ASCII码,即'A'存储的是65。
- 转义字符:转义字符是以字符“\”开头的字符序列。例如:“\n”表示一个换行符、“\t”表示一个制表符
(4)字符串常量
字符串常量使用一对双括号括起来的字符序列。例如:“hello”,“123”等
(5)符号常量
C语言中亦可以用一个标识符表示一个常量,这个常量称为符号常量。符号常量使用前必须先定义,其语法格式如下:
#define 标识符 常量
例如:#define PI 3.14159 这样PI就相当于常量3.14159
2.变量的概念
在程序运行期间,可能会用到一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元用一个标识符来标识。这些用来引用计算机内存地址的标识符称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
(1)整型变量
(2)实型变量
(3)字符变量
(4)枚举型变量
四、运算符
1.算术运算符
【注意】
(1)进行四则运算时,遵循“先乘除后加减”的原则。
(2)在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算时有浮点数参与,系统会将整数数据隐式转换成浮点类型,最终得到的结果是一个浮点数。
例如:3/2=1;3.0/2=1.5
(3)在取模运算中,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。
例如:(-5)%3=-2;5%(-3)=2
2.自增、自减运算符
作用是使变量的值加一或减一
++i,--i(在使用i之前,先使i加(减)1)
i++,--i(在使用i之后,使i的值加(减)1)
例如:假设i初始值为3
printf("%d\n",i++);//输出结果为3
若改为
printf("%d\n",++i);//输出结果为4
【注意】自增运算符和自减运算符只能用于变量,而不能用于常量或表达式,例如:5++或(a+b)++都是不合法的。
3.关系运算符
大小关系:>,>=,<,<=
相等关系和不等关系:==,!=
4.逻辑运算符
非! 与&& 或||
5.位运算符
<< 按位左移 >> 按位右移 ~ 按位取反 &按位与 | 按位或 ^ 按位异或
6.赋值运算符
= += -= *= /= %= 等拓展赋值运算符
7.条件运算符
?:
提示:什么时候用到条件运算符
程序1
if(a>5){b=3;}
else{b=-20}
程序2
a>5?b=3:b=-20;
程序1和程序2实现的功能完全相同。
8.逗号运算符
(,)用来分割一些连在一起的表达式,其中用逗号隔开的表达式的值先分别运算,最终返回最后一个表达式的值。
例如:
int a=1,b=2,c=3;
printf("%d\n",(a,b,c));//输出结果为3,因为(a,b,c)是一个逗号表达式。
9.指针运算符
*和&
10.成员运算符
.和->
11.求字节运算符
sizeof
运算符优先级口诀“单算移关与,异或逻条赋”
五、表达式
表达式的求值顺序一部分是由它所包含的操作符的优先级和结合性决定。同样,有些表达式的操作数在求值过程中可能需要转换成其他类型。
当一个运算符的各个操作数类型不同时,就需要通过一些规则把它们转换为某种共同的类型。一般来说,自动转换是把“比较窄的”操作数转换成“比较宽的”操作数,并不丢失信息的转换。针对可能导致信息丢失的表达式,编译器可能会发出警告信息。C语言程序中的类型转换可分为隐式类型转换和显式类型转换两种。
(1)隐式类型转换
又称“自动类型转换”,隐式类型转换又可以分为三种:算术转换、赋值转换、输出转换
①算术转换
进行算术运算时,不同类型数据必须转换成同一类型的数据才能运算。转换原则:以表达式中占内存最大的类型为标准,其他的数据类型都转换成该类型。
下图对这种转换规则进行了更加形象地描述:
②赋值转换
进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值好左边数据类型,若右边的数据类型的长度大于左边,则进行截断或舍入操作。
③输出转换
在程序中将数据用printf()函数以指定格式输出时,若要输出的数据类型和输出格式不符,便自动进行类型转换,例如:一个整型数据用符号格式(%c)输出时,相当于将int型转换成char型。
【注意】较长型数据转换成短型数据输出,其值不能超出短型数据允许的范围,否则转换时将出错。
(2)显式类型转换
又称“强制类型转换”,是指使用强制类型转换运算符,将一个变量或表达式转化成所需要的类型,这种类型转换可能会造成数据的精度的丢失。语法结构:
(类型名)表达式
例如:
int x=3;
若要转换成float类型,直接用(float)x即可
【注意】
将int型数值赋给char型变量,只保留其最低8位,高位部分舍弃。