数据类型
基本类型:
名称 | 含义 | 长度 | 范围 |
---|---|---|---|
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;
是等价的
使用指针访问数组一定要注意数组的上下限
本文链接:https://blog.chrxw.com/archives/2020/03/01/993.html
转载请保留本文链接,谢谢