数据类型
基本类型:
| 名称 | 含义 | 长度 | 范围 |
|---|---|---|---|
| bit | 位 | 1位 | 0,1 |
| char | 字符型 | 1字节 | -128 ~ 127 |
| unsigned char | 字符型 | 1字节 | 0 ~ 255 |
| int | 整型 | 2字节 | -32768 ~ 32767 |
| unsigned int | 整型 | 2字节 | 0 ~ 65525 |
| long | 长整型 | 4字节 | -2147483648 ~ 2147482647 |
| unsigned long | 长整型 | 4字节 | 0 ~ 4294967296 |
| float | 单精度浮点型 | 4字节 | -3.40E+38 ~ +3.40E+38 |
| double | 双精度浮点型 | 8字节 | -1.79E+308 ~ +1.79E+308 |
| - | 指针 | 2~3字节 | 指向 0 ~ 64KB 之间的地址 |
数据类型只规定了变量占用的内存空间,与变量保存的内容无关。
换言之,可以用char保存数值,也可以用long保存字符。
计量单位
计量单位:
| 全称 | 符号 | 中文 | 单位换算 |
|---|---|---|---|
| bit | b | 位 | - |
| byte | B | 字节 | 1B = 8b |
| kilobyte | KB | 千字节 | 1KB = 1024B |
| mebibyte | MB | 兆字节 | 1MB = 1024KB |
| …… | …… | …… | …… |
构造类型:
| 名称 |
|---|
| 数组 |
| 结构体 |
| 共用体 |
| 枚举 |
类型装换
-
自动类型转换(不考虑数值溢出)
过程 说明 浮点型 > 整型 只保留整数部分,小数部分被舍弃,损失精度 整型 > 浮点型 不会损失精度,只改变类型 单精度浮点 > 双精度浮点 在尾部添0,不损失精度 双精度浮点 > 单精度浮点 四舍五入截断,损失精度 字符型 > 整型 不损失精度,只改变类型 整型 > 字符型 只保留低8位,损失精度 -
强制类型转换
方法 说明 (char)(x) 将 x转换到字符型(int)(x) 将 x转换到整型(long)(x) 将 x转换到长整型(float)(x) 将 x转换到单精度浮点型(double)(x) 将 x转换到双精度浮点型也可以加上
unsigned关键字,即可转成对应的无符号类型
指针和数组
-
指针
使用
取地址运算符(&)可以获取对象的指针。例程:
#include <stdio.h> int main(){ char a = 10; char b;//定义两个单字节变量 //定义一个可以指向单字节对象的指针 char *p1,*p2;//指针未初始化,指向地址未知 p1 = &a;//指针p1现在指向变量a p2 = p1;//指针p2现在也指向变量a b = *p2;//先从p2指向的地址读取数值,然后赋值给b printf("%d",b);//输出10 return(0); }注意
*的使用 -
数组
数组是一系列变量的集合,在内存中连续分布,用指针可以快速访问。
例程:
#include <stdio.h> int main(){ char a[5] = {1,2,3,4,5}; char b[5]; b[2] = a[0]; printf("%d",b[2]);//输出1 return(0); }内存映射:
地址 变量 X a[0] X+1 a[1] X+2 a[2] X+3 a[3] X+4 a[4] X代表a[0]被分配到的地址
因为是char类型的数组,所以每个元素占用1字节,char a[5]就占用5字节 -
使用指针访问数组
例程:
#include <stdio.h> int main(){ char a[5] = {1,2,3,4,5}; char b,c; char *p1,*p2; p1 = &a[0];//p1指向a[0] p2 = a;//p2也指向a[0] b = *p1+3;//将p1+3位置的值赋值给b(即a[3]) c = *p2+4;//将a[4]赋值给c printf("%d,%d",b,c);//输出4,5 return(0); }例程中的
p1 = &a[0]和p2 = a;是等价的
使用指针访问数组一定要注意数组的上下限