数据类型

基本类型:

名称 含义 长度 范围
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;是等价的
使用指针访问数组一定要注意数组的上下限

最后修改:2020 年 03 月 03 日
如果觉得我的文章对你有用,请随意赞赏