C语言数据类型完全指南
编程小白的友好型知识汇总
C语言有丰富的数据类型,就像我们生活中有不同种类的东西需要分类存放一样。
理解数据类型是学习编程的关键第一步!就像整理收纳箱,不同物品需要不同的箱子来存放。
基本数据类型
整型 (int)
- 用于存储整数(如:10, -5, 1000)
- 就像数学中的整数,不带小数部分
- 占用内存:通常4字节(32位系统)
int age = 25; // 存储年龄
浮点型 (float, double)
- 用于存储小数(如:3.14, -0.5, 2.0)
- float:单精度浮点数(约6-7位小数)
- double:双精度浮点数(约15位小数)
float pi = 3.14; // 存储圆周率
double precise = 3.1415926535; // 需要更高精度时
double precise = 3.1415926535; // 需要更高精度时
字符型 (char)
- 用于存储单个字符(如:’A’, ‘b’, ‘5’, ‘%’)
- 字符要用单引号括起来
- 实际存储的是字符的ASCII码值
char grade = ‘A’; // 存储成绩等级
类型修饰符
改变数据类型特性
signed 和 unsigned
- signed:有符号数(可正可负)
- unsigned:无符号数(只能是非负数)
- 默认情况下,int 和 char 是有符号的
unsigned int age = 25; // 年龄不可能是负数
signed int temperature = -5; // 温度可为负
signed int temperature = -5; // 温度可为负
short 和 long
- short:短整型(占用内存较少)
- long:长整型(占用内存较多,范围更大)
- long long:更长整型(C99标准)
short smallNumber = 100; // 小范围整数
long bigNumber = 1000000; // 大范围整数
long bigNumber = 1000000; // 大范围整数
注意: 具体字节大小取决于编译器和系统架构
枚举类型 (enum)
- 用于定义一组命名的整数常量
- 提高代码可读性,使代码更清晰
- 本质上还是整数,但使用名字代替数字
// 定义星期枚举
enum Weekday {MON, TUE, WED, THU, FRI, SAT, SUN};
// 使用枚举
enum Weekday today = WED;
enum Weekday {MON, TUE, WED, THU, FRI, SAT, SUN};
// 使用枚举
enum Weekday today = WED;
优点: 比直接使用数字0-6代表星期更直观
void类型
特殊的数据类型
- 表示”无类型”或”空类型”
- 三种主要用途:
void sayHello() {
printf(“Hello!”);
}
2. 函数无参数
printf(“Hello!”);
}
int getValue(void) {
return 42;
}
3. 通用指针类型 (void*)
return 42;
}
void *ptr; // 可以指向任何类型的数据
派生类型
指针 (pointer)
- 存储内存地址的变量
- 就像现实中的门牌号
- 通过指针可以访问或修改内存中的数据
int num = 10;
int *ptr = # // ptr存储了num的地址
int *ptr = # // ptr存储了num的地址
数组 (array)
- 存储相同类型元素的集合
- 元素在内存中连续存储
- 可以看作是一排连续的储物柜
int scores[5] = {90, 85, 78, 92, 88};
char name[] = “Alice”;
char name[] = “Alice”;
结构体 (struct)
- 组合多种不同类型的数据
- 用于表示现实世界的实体
struct Student {
char name[50];
int age;
float gpa;
};
char name[50];
int age;
float gpa;
};
共用体 (union)
- 多个成员共享同一块内存空间
- 任一时刻只能存储一个成员的值
- 节省内存但使用需要谨慎
union Data {
int i;
float f;
char str[20];
};
int i;
float f;
char str[20];
};
类型转换
隐式转换
- 编译器自动进行的类型转换
- 遵循从小类型向大类型转换规则
- 如:int + float → float
int a = 5;
float b = 2.5;
float result = a + b; // a被隐式转为float
float b = 2.5;
float result = a + b; // a被隐式转为float
显式转换(强制转换)
- 程序员手动指定的类型转换
- 使用(类型)操作符
- 可能造成数据精度损失
float pi = 3.14159;
int approx = (int)pi; // approx值为3
double bigNum = 12345.6789;
int num = (int)bigNum; // 小数部分被截断
int approx = (int)pi; // approx值为3
double bigNum = 12345.6789;
int num = (int)bigNum; // 小数部分被截断
注意: 强制转换可能丢失数据,需谨慎使用!