目录
1、数据类型
1.1、基本数据类型
逻辑类型。只有两个量true和false,表示逻辑真值和逻辑假值。
整数类型。包括char, short, int和long。
浮点类型。包括float和double。
void类型。主要用于说明不返回值的函数或指向任一类型的指针等。
- bool(布尔类型)
将直接将bool类型用作整型->运行报错
修改:加入头文件->#include <stdbool.h> -> 运行成功
赋予不同的数据,所运行的结果展示:
_Bool、true、false定义在stdbool.h头文件中(_Bool是基本类型,true和false要引入头文件)
路径:
-E:生成预处理之后的文件
- char类型(字符型)
Es:ASCII码
Es:越界
- short类型和int类型
快速的找到各数据类型的范围:在limits.h头文件中有宏定义
Es:
- long类型
- 浮点类型
1.2、强制数据类型的转换
强制数据类型的转换是指采用某种方式将某种数据类型强制转换成指定的数据类型。包括显式的数据类型转换,和隐式的数据类型转换。
((类型))
例如,
int a=22, b=0 ;
float c = 24.87, d= 3.3;
b = (int) (a + c +d) ; // b为50
强制类型转换符后面的表达式如存在复杂运算,就一定要用小括号括起来
强制类型转换符是一种不安全的转换,一般都是将高级类型转换成低级类型,要丢失数据的精度;
强制类型转换并不改变表达式中变量的数据类型和其值。
2、常量
2.1、整型常量
常量是指在程序运行期间其数值不发生变化的数据。整型常量通常简称为整数。
整数可以是十进制数、八进制数和十六进制数。例如,十进制的数值3356可以有下列二种不同的表示形式:
八进制数 06434
十六进制数 0xd1c
2.2、浮点常量
浮点常量又称为实数,一般含有小数部分。
在C语言中,实数只有十进制的实数,分为单精度和双精度。实数有两种表示方法, 即一般形式和指数形式。
一般形式的实数基本形式如下:
例如, 3.5 , -12.5, 3.1415926
Es:
2.3、指数常量
指数形式的实数一般是由尾数部分、字母e或E和指数部分组成。 当一个实数的符号为正号时,可以省略不写,其表示的一般形式如下:
1.176e+10 表示 1.176×10+10
- 3.5789e-8 表示 -3.5789×10-8
通常表示特别大或特别小的数
Es:
2.4、字符常量
字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。
‘ A’, ‘a’, ‘Q’, ‘0’, ‘9’, ‘+’, ‘:’, ‘?’, ‘$’ 都是字符常量。
在C语言中, 字符常量具有数值。字符常量的值就是该字符的ASCII码值。
可以把字符常量看做一个字节的正整数。
例如,char a, b, u, v
a = 'F' ; // 将70送给a
b = 'A'+2; // b存放的是 'C' 字符
u = ' ' + 'B'; // u存放的是 'b' 字符
v= 'b' - 32; // v存放的是 'B' 字符
它们分别相当于下列运算;
a= 70;
b= 65+2;
u= 32+66 ;
v= 97-32;
Es:
2.5、字符串常量
所谓字符串常量是指用双引号括起来的一串字符来表示的数据。(字符串以\0结尾) “9”—‘9’,’\0’
下面给出几个字符串常量的例子:
"Hello!", "StudentS", "9", “LINUX", "李四"
“北京海淀成府路***号", "姓名:", “****@163.com", ""
Es:
2.6、标识常量
所谓标识常量是指用标识符代替常量使用的一种常量, 其名称通常是一个标识符。
标识常量也叫符号常量,一般用大写英文字母的标识符。
在使用之前必须预先定义。说明形式为:
例如
#define MAX 50
#define PI 3.1415926
#define NULL 0
#define EOF -1
#define ERROR -1
其中,MAX、PI、NULL、 EOF和ERROR都是标识常量, 它们代替的常量分别是50、3.1415926、0 、-1和-1 。
一般情况,每个标识常量说明式子只能给出一个标识常量,并且占据一个书写行。
定义一个宏名字之后,可以在其他宏定义中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
如果一个串长于一行,可在行尾用反斜线”\”续行
#define LONG_STRING “This is a very very long \
String that is used as an example”
案例:
一个水分子的质量约为3.0*10-23g,1夸脱水大约有950g,编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。
2.7、常变量
C99允许使用常变量,方法是在定义变量时,前面加一个关键字const,如:const int a=3;
定义a为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。
常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
请思考:常变量与符号常量有什么不同?如:
# define Pi 3.1415926 //定义符号常量
const float pi=3.1415926; //定义常变量
符号常量Pi和常变量pi都代表3.1415926,在程序中都能使用。但二者性质不同:定义符号常量用#define指令,它是预编译指令,它只是用符号常量代表一个字符串,在预编译时仅进行字符替换,在预编译后,符号常量就不存在了(全置换成3.1415926了),对符号常量的名字是不分配存储单元的。而常变量要占用存储单元,有变量值,只是该值不改变而已。从使用的角度看,常变量具有符号常量的优点,而且使用更方便。有了常变量以后,可以不必多用符号常量。
2.8、宏定义函数
在软件开发过程中,经常有一些常用或者通用的功能或者代码段,封装成为宏定义
#define MAX( a, b) ( (a) > (b) ? (a) : (b) )
int max( int a, int b)
{
return (a > b a : b)
}
swap(x,y)交换函数
#define swap(x, y)\
x = x + y;\
y = x - y;\
x = x - y;
有一些任务根本无法用函数实现,但是用宏定义却很好实现。
比如参数类型没法作为参数传递给函数,但是可以把参数类型传递给带参的宏。
#define MALLOC(n, type) \
( (type *) malloc((n)* sizeof(type)))
宏可以增加程序的长度,如果相同的代码需要出现在程序的几个地方,更好的方法是把它实现为一个函数