一、C语言数据类型体系
C语言的数据类型可分为以下4大类:
基本类型
├── 整型 (int)
├── 浮点型 (float/double)
├── 字符型 (char)
└── void类型
构造类型
├── 数组
├── 结构体 (struct)
├── 共用体 (union)
└── 枚举 (enum)
指针类型
派生类型
二、详细知识点解析
1. 基本数据类型
(1) 整型
- 类型:int
- 修饰符:short(短整型)、long(长整型)、unsigned(无符号)
- 存储大小:short int(2字节)、int(4字节)、long int(8字节)
- 取值范围:int为-2147483648到2147483647
(2) 浮点型
- float:单精度浮点(4字节,6位小数精度)
- double:双精度浮点(8字节,15位小数精度)
- long double:扩展精度(16字节,19位小数精度)
(3) 字符型
- char:存储ASCII字符(1字节)
- 本质是存储0-255的整数
(4) void类型
- 表示”无类型”
- 用于函数返回值(无返回值)和指针类型(void*)
2. 类型修饰符
- signed:有符号(默认)
- unsigned:无符号(仅表示正数)
- short:缩短存储空间
- long:扩展存储空间
三、记忆技巧
- 分类记忆法:
- 数值类型:整型、浮点型
- 字符类型:char
- 复合类型:数组、结构体
- 大小口诀:”短整2,整型4,长整8,浮点4双8″
- 格式化输出符号:
- %d – int
- %f – float
- %lf – double
- %c – char
- %s – 字符串
四、代码示例
#include <stdio.h>
int main() {
// 基本类型
int age = 25; // 整型变量
float price = 9.99f; // 单精度浮点
double pi = 3.1415926535; // 双精度浮点
char grade = 'A'; // 字符型
// 数组类型
int scores[3] = {90, 85, 95}; // 整型数组
// 结构体类型
struct Student {
char name[20];
int id;
};
struct Student stu1 = {"Alice", 1001}; // 结构体变量
// 指针类型
int *p = &age; // 指向整型的指针
// 类型转换
int total = (int)(price * 100); // 强制类型转换
// 输出验证
printf("年龄: %d\n", age);
printf("价格: %.2f\n", price);
printf("圆周率: %.4lf\n", pi);
printf("成绩: %c\n", grade);
printf("数组第一个元素: %d\n", scores[0]);
printf("学生ID: %d\n", stu1.id);
printf("指针指向的值: %d\n", *p);
printf("转换后的总金额: %d\n", total);
return 0;
}
五、代码逐行解释
- #include 引入标准输入输出库,使我们可以使用printf等函数
- int main() { … }程序入口函数,返回值为int类型
- int age = 25;声明并初始化一个整型变量,4字节存储空间
- float price = 9.99f;声明单精度浮点数,末尾的f表示float类型
- double pi = 3.1415926535;声明双精度浮点数,精度更高
- char grade = ‘A’;声明字符型变量,单引号表示字符
- int scores[3] = {90, 85, 95};声明包含3个元素的整型数组
- struct Student { … };定义结构体类型,包含字符数组和整型成员
- struct Student stu1 = {“Alice”, 1001};初始化结构体变量,字符串使用双引号
- int *p = &age;声明整型指针,&符号获取变量地址
- int total = (int)(price * 100);强制类型转换,将浮点数转换为整数
- printf(“年龄: %d\n”, age);格式化输出,%d对应整型
- printf(“价格: %.2f\n”, price);%.2f表示保留两位小数
- return 0;程序正常结束的返回值
六、常见问题
- 类型溢出:当数值超过类型范围时会发生溢出
- 精度损失:大数转小数时可能导致数据丢失
- 内存占用:合理选择类型可以优化内存使用
七、总结建议
- 通过sizeof()运算符验证类型大小
- 不同类型间运算时注意隐式类型转换规则
- 开发中根据需求选择最合适的类型
- 多练习类型转换和格式化输出的配合使用