C语言基本数据类型

在编程中,数据类型决定了变量可以存储什么样的数据以及占用多少内存空间。

C语言提供了丰富的基本数据类型,包括整型、浮点型和字符型等。理解这些数据类型是编写高效、正确程序的基础。

本节将详细介绍C语言的基本数据类型及其特性。

📊 数据类型概述

C语言中的数据类型分为四大类:基本数据类型、构造数据类型(如数组、结构体、共用体)、

指针类型和空类型(void)。本章重点讲解基本数据类型,它们是构成更复杂数据的基础。

注意: C语言没有内置的字符串类型,字符串通常用字符数组表示,我们将在后续章节学习。

🔢 整型(Integer)

整型用于存储整数(不包含小数部分)。C语言提供多种整型,以适应不同范围的数值需求。

主要整型包括:

int —— 基本整型,通常占4个字节(32位),范围约 -2.1e9 ~ 2.1e9。

short 或 short int —— 短整型,通常占2个字节,范围 -32768 ~ 32767。

long 或 long int —— 长整型,在32位系统通常占4字节,64位系统占8字节。

long long —— 长长整型,至少占8字节(C99标准引入)。

整型还可以配合 signed(有符号)和 unsigned(无符号)修饰符使用:

有符号(默认):可存储正数、负数和0。

无符号:只存储非负数,能表示的正数范围大约是同样大小有符号类型的两倍。

📏 整型大小与范围(常见平台)

类型

大小(字节)

有符号范围

无符号范围

格式说明符

short2-32,768 ~ 32,7670 ~ 65,535%hd / %hu

int4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295%d / %u

long4 或 8*至少 -2,147,483,648 ~ 2,147,483,647至少 0 ~ 4,294,967,295%ld / %lu

long long8-9.2e18 ~ 9.2e180 ~ 1.8e19%lld / %llu

* 取决于系统和编译器,在64位Linux/macOS上 long 通常为8字节,Windows上为4字节。

💻 整型示例代码

#include

int main() {

int a = 100;

short b = 2000;

long c = 123456789L; // L后缀表示long类型

unsigned int d = 40000; // 无符号整型

printf("int: %d\n", a);

printf("short: %hd\n", b);

printf("long: %ld\n", c);

printf("unsigned int: %u\n", d);

// 使用sizeof查看类型占用的字节数

printf("Size of int: %zu bytes\n", sizeof(int));

printf("Size of short: %zu bytes\n", sizeof(short));

printf("Size of long: %zu bytes\n", sizeof(long));

printf("Size of long long: %zu bytes\n", sizeof(long long));

return 0;

}

小提示: sizeof 是C语言运算符,用于计算数据类型或变量所占内存大小,返回 size_t 类型,通常用 %zu 格式输出。

🔤 字符型(char)

char 类型用于存储单个字符,如字母、数字、标点符号等。

实际上,字符在内存中是以其ASCII码(整数)存储的,因此 char 本质上也是一种整型。

它通常占1个字节(8位),可以存储 -128 到 127(有符号)或 0 到 255(无符号)的整数。

字符型示例代码

#include

int main() {

char ch = 'A'; // 字符常量用单引号

char grade = 65; // 65对应ASCII码 'A'

unsigned char num = 200; // 无符号字符

printf("ch = %c, ASCII = %d\n", ch, ch);

printf("grade = %c, ASCII = %d\n", grade, grade);

printf("num = %d\n", num);

return 0;

}

格式化输出: 使用 %c 输出字符,%d 输出其ASCII码值。

🌊 浮点型(Floating-point)

浮点型用于存储实数(带小数点的数)。C语言提供两种主要的浮点类型:

float —— 单精度浮点型,通常占4字节,精度约6-7位有效数字。

double —— 双精度浮点型,通常占8字节,精度约15-16位有效数字,是默认的浮点类型。

long double —— 扩展精度浮点型,大小和精度依赖平台(通常10或16字节)。

浮点型示例代码

#include

int main() {

float pi = 3.14159f; // f后缀表示float常量

double e = 2.718281828459045;

long double lg = 1.234567890123456789L;

printf("float: %f\n", pi);

printf("double: %.15f\n", e); // 控制输出精度

printf("long double: %Lf\n", lg);

printf("Size of float: %zu bytes\n", sizeof(float));

printf("Size of double: %zu bytes\n", sizeof(double));

printf("Size of long double: %zu bytes\n", sizeof(long double));

return 0;

}

注意: 浮点数在计算机中采用近似表示,比较两个浮点数是否相等时应使用差值小于某个精度,而不是直接使用 ==。

🧩 void类型

void 表示“无类型”,主要用于以下场景:

函数无返回值:void func(void);

函数无参数:int func(void); (虽然可以省略,但建议显式写明)

通用指针:void * 可以指向任何类型的数据,用于实现泛型编程。

说明: void 不能直接定义变量(如 void a; 是错误的),因为它代表未知类型,编译器无法分配内存。

🔄 类型转换

在C语言中,不同类型的数据可以进行混合运算,此时会发生类型转换。

转换分为隐式转换(自动)和显式转换(强制)。

隐式转换规则(部分)

在算术运算中,较低精度类型会自动提升为较高精度类型(如 int 和 float 运算,int 转为 float)。

赋值时,右边表达式的类型会转换为左边变量的类型,可能发生截断或精度损失。

整型提升:char 和 short 在表达式中通常会被提升为 int。

强制类型转换示例

#include

int main() {

int a = 10;

int b = 3;

float result = (float)a / b; // 将a强制转换为float,避免整数除法

printf("10 / 3 = %f\n", result);

char ch = 'A';

int ascii = (int)ch; // 将字符转为ASCII码

printf("ASCII of %c = %d\n", ch, ascii);

return 0;

}

💡 数据类型选择建议

如果数值范围在 int 范围内,优先使用 int,它通常是最快的类型。

需要节省内存时(如大数组),使用 short 或 char。

需要存储大整数(超过21亿)时,使用 long long 或 unsigned long long。

浮点数优先使用 double,除非内存非常紧张且精度要求不高。

字符用 char,注意是否需要无符号(例如存储二进制数据)。

现在你已经掌握了C语言的基本数据类型。下一章我们将学习如何声明变量和常量,以及变量的作用域和生命周期。

请动手运行本节中的示例代码,观察不同数据类型的大小和输出结果。

上一章: Hello World 程序解析

下一章: 变量与常量