数据类型
1.基本类型
C语言里的基础数据类型
2.构造类型
简单来说,就是以基本类型的数据为基础,进行添加、删减、设计、包装等,设计出新的数据结构
3.指针类型
指针对于C语言来说非常重要,简单来讲,可以将指针看成某个值的内存地址
4.空类型
关键字:void
一般每个函数都有一个返回值,将其返回值返回以便使用。但是当你不想这个函数返回数值的时候,就可以使用空类型设定,这样就不会有返回值了
标识符
简单来说就是id
一个变量、函数、常量、数组等,你在定义的时候要给它们起个名字,起的这个名字就是标识符。
但这个名字却不是能乱取的,C语言中有以下规定:
1. 所有标识符必须由字母或者下划线开头,不能以数字、符号开头
int ?num; //错误定义
int 9num;
int num; //正确定义
int _num;
2. 除了开头,其他任何位置都可以使用数字、下划线、字母
int a4d_f3; //正确定义
3. 字母区分大小写
int A; //这是两个完全不同的变量
int a;
4. 系统关键字不能定义
int int; //错误
int、float之类是专门用来使用的系统关键字,不能定义,铁打的规矩
5. 定义的标识符,尽量通俗易懂,与你接下来写的代码相关,不然代码写长了,中间出了错,你再回过头看,自己也不知道自己写的是什么了
常量
常量对于大家应该不陌生了,常量就是指在程序运算中不会变化的量,主要分为以下三大类
整型常量
整型常量即整型常数,整型我理解为整数,如12,-413。
其中整型又分为长整型、短整型、符号整型、无符号整型
- 无符号即数前面没有正负号,即非负数
- 长整型即32位,短整型即16位
我们一般称的整型,即短整型
无符号短整型取值范围是:
2
0
到
2
16
−
1
2^0到2^{16}-1
20到216−1
有符号短整型的取值范围是:
−
2
15
到
2
15
−
1
-2^{15}到2^{15}-1
−215到215−1
无符号长整型取值范围是:
2
0
到
2
32
−
1
2^0到2^{32}-1
20到232−1
有符号长整型取值范围是:
−
2
31
到
2
31
−
1
-2^{31}到2^{31}-1
−231到231−1
为什么这样取呢?
在计算机中,以二进制存储、处理数据,非0即1。
短整型16位,意思是有16位单元格
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|
每个单元格存储一位数据,这个数据不是0就是1,因为有16位,按照排列组合,那么就有
2
16
2^{16}
216种排法
即取值范围,32位同理。
- 八进制整数
在常数前加上0进行修饰
num = 0123: //在常数前加0代表八进制
以下是错误写法
num = 123; //没有前缀0
num = 02129 //包含了非8进制数“9”
- 十六进制
在常量前面加0x为前缀,表示为十六进制
num = 0x13a; //前缀加0x表示16进制
num = 0xA2;
以下是错误写法
num = 13a; //未加前缀0x
num = 0xG3; //出现非16进制数“G”
实型常量
实型=整数部分+小数部分
其中用小数点隔开,用以下两种方法来表示
- 科学计数法
num = 12.35;
num = 0.65;
- 指数方式
当实型特别大或者特别小的时候,不利于表达,那么采用指数的方式来表达会非常方便。用字母e或者E进行指数表达,e后面跟的数即指数
45e2=4500
45e-2=0.45
字符型常量
1.字符常量
- 字符使用‘ ’括起来,它表示一个符号,没有任何运算意义,可以想象它为一副画,一个模型
- 字符常量只能包含一个字符,不是字符串。'A’是对的,而‘AB’就错了,超过一个字符,就可理解为字符串
- 字符常量是区分大小写的,‘A’和‘a’代表不同的符号
2.字符串常量
字符串常量是“ ”括起来的若干字符序列。例如“hello world!”,这就是若干个字符串起来的字符串。若字符串里任何常量也没有,称为空串,长度为0。
C语言存储字符串变量的时候,系统会在末尾自动加一个"\0",作为字符串的结束标志位,例如"hello"在内存中存储的形式为
h | e | l | l | o | \0 |
---|
转义字符
在C语言中打出“\n”,但是在运行时却看不到“\0”,按理来说它应该是属于字符串,那为什么看不到?
因为它是一种特殊的字符,称为转义字符
以反斜杠\开头,后面跟一个字符,表示特定的含义,如图
转义字符 | 意义 |
---|---|
\n | 回车换行 |
\t | 横向跳到下一制表位置 |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\f | 走页换纸 |
\ | 反斜杠“\” |
’ | 单引号符 |
\a | 鸣铃 |
\ddd | 1~3位八进制所代表的字符 |
\xhh | 1~2位十六进制数所代表的字符 |
符号常量
使用一个自定义的符号来代替固定的常量值
#include <stdio.h>
#define Shu5 5
int main()
{
int a,b;
a = 3;
b = Shu5 + 3;
printf("%d",b);
return 0;
}
这里使用Shu5来代替常量5进行运算,输出为
变量
整型变量
整形变量是存储整型数据的变量,一般有short和long关键字进行修饰
类型 | 关键字 |
---|---|
有符号基本整型 | [signed] int |
无符号基本整型 | unsigned [int] |
有符号短整型 | [signed] short [int] |
有符号短整型 | unsigned short [int] |
有符号长整型 | [signed] long [int] |
无符号长整型 | unsigned long [int] |
[]为可选部分,在编写时可以省略掉的关键字。例如[signed] int,编写时可以直接写int
字节(byte):字节是计算机中数据处理的基本单位,习惯上用大写B 来表示,1B(byte,字节)= 8bit(位)
类型 | 占用字节 |
---|---|
有符号基本整型 | 4byte |
无符号基本整型 | 4byte |
有符号短整型 | 2byte |
无符号短整型 | 2byte |
有符号长整型 | 4byte |
无符号长整型 | 2byte |
实型变量
同实型常量一样,它也是浮点型数据
实型变量=整数+小数
实型变量分为单精度和双精度和长双精度3种类型
类型 | 关键字 | 占用内存 |
---|---|---|
单精度类型 | float | 4byte |
双精度类型 | double | 8byte |
长双精度类型 | long double | 8byte |
字符型变量
字符型变量存储字符常量的变量,将一个字符常量存储到字符变量当中,将该字符的ASCII码值(无符号)存储到单元内存中
字符型变量在内存中只占用一个字节(1byte)
变量的存储类别
1.auto变量
定义一个局部变量为自动,即每次执行到此,都产生新的变量,重新初始化。
我理解的就是不管如何运行,auto看成常量,因为每次执行到它,他都要释放之前的内存,重新分配内存空间。换句话说,这个auto定义的值,不管这次你用它进行了多少次加减乘除等等操作…下一次用的时候,它还是原来的值,我称之为无记忆功能。
#include <stdio.h>
void hanshu()
{
auto int num = 1;
num = num + 1;
printf("%d\n",num);
}
int main()
{
printf("第一次调用:");
hanshu();
printf("第二次调用:");
hanshu();
return 0;
}
2.stctic变量
在内部变量声明为static变量和在外部变量声明为static变量是不一样的,在局部变量来说,static变量的功能与auto变量的功能相反,我称之为具有记忆功能,上次是啥,这次调用的时候还是啥
#include <stdio.h>
void hanshu()
{
static int num = 1;
num = num + 1;
printf("%d\n",num);
}
int main()
{
printf("第一次调用:");
hanshu();
printf("第二次调用:");
hanshu();
return 0;
}
3.extern变量
extern成为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。
一个工程都是由多个C语言文件组成,但是多个C语言文件里的某些变量多多少少会被其他文件的程序引用到,这时只需将被引用到的变量进行extern声明,即可在其他文件的程序使用。
例:A文件有num变量,但是现在B文件需要使用num变量,这时只需给变量num进行extern声明,即可在B文件中使用
混合运算
- int只能与int运算,float只能与float进行运算等等…不可混算。如需混合运算,需要将不同类型的数据转化为同意类型,才能进行运算