C 语言数据类型

2025 年 6 月 12 日 | 阅读 11 分钟

在 C 编程中,数据类型指定了变量可以存储的数据类型,例如整数、浮点数、字符等。它还决定了为变量分配的内存量以及可以对其执行的操作。与大多数编程语言一样,C 使用数据类型来定义和管理不同的数据集。通常,C 语言中的数据类型分为四大类。

C Data Types

C 语言中有以下数据类型。

类型数据类型
基本数据类型int、char、float、double
派生数据类型数组、指针、结构体、联合体
枚举数据类型enum
空数据类型void

基本数据类型

在 C 编程中,基本数据类型是基于整数和浮点数的类型。这些基于整数和浮点数的数据类型可以是有符号的或无符号的。在 C 编程语言中,它支持有符号和无符号字面量。

基本数据类型的内存大小可能会根据 32 位或 64 位操作系统而改变。

让我们看看基本数据类型。其大小是根据 32 位体系结构给出的。

数据类型内存大小范围
char1 字节−128 到 127
有符号字符1 字节−128 到 127
无符号字符1 字节0 到 255
short2 字节−32,768 到 32,767
有符号短整型2 字节−32,768 到 32,767
无符号短整型2 字节0 到 65,535
int2 字节−32,768 到 32,767
有符号整型2 字节−32,768 到 32,767
无符号整型2 字节0 到 65,535
短整型2 字节−32,768 到 32,767
有符号短整型2 字节−32,768 到 32,767
无符号短整型2 字节0 到 65,535
长整型4 字节-2,147,483,648 到 2,147,483,647
有符号长整型4 字节-2,147,483,648 到 2,147,483,647
无符号长整型4 字节0 到 4,294,967,295
float4 字节 
double8 字节 
长双精度浮点型10 字节 

a) 整型(Int)

非分数的、不包含任何小数值的整数,这些数字存储在 int 数据类型下。我们通常将 int 数据类型用于诸如计数、索引和其他变量。int 数据类型表示正数和负数,因为它们默认是有符号的。在大多数设备上,一个 int 占用 4 字节的内存,这允许它存储大约 -20 亿到 +20 亿之间的值。

有符号整型:此数据类型使用 4 字节内存存储正负整数。如果我们要存储此类值,我们使用有符号整型数据类型。如果系统是 32 位系统,它接受介于 -2147483648 和 2,147,483,648 之间的值。

示例

无符号整型:它仅在 4 字节内存存储中存储正整数值,即 0 及以上。正值的范围是有符号整数的两倍,即从 0 到 4294967295,是有符号整数范围的两倍。

示例

短整型:如果我们要存储较小的整数值,通常需要两字节的内存存储,我们可以使用短整型。对于有符号短整型值,其范围限制在 -32768 到 32767。它在受限环境中节省内存。

示例

长整型:如果我们要存储比常规整型更大的数字,我们可以使用长整型,它通常占用 4 或 8 字节。在 32 位操作系统上进行比较时,它可以与 int 数据类型进行比较。

示例

C 整型示例

我们举一个例子来说明 C 语言中的整型。

示例

编译并运行

输出

在这个例子中,我们讨论了 C 语言中执行各种操作的几种整型。

b) 字符数据类型 (char)

在 C 语言中,单个字符由 char 数据类型表示。它通常用于保存 ASCII 或 UTF-8 编码方案的字符,例如字母、数字、符号或逗号。单个 char 可以表示 256 个字符,它占用一个字节的内存。诸如 'A'、'b'、'5' 或 '$' 之类的字符用单引号括起来。

语法

它具有以下语法:

C 字符类型示例

我们举一个例子来说明 C 语言中的字符类型。

示例

编译并运行

输出

T

c) 浮点数据类型 (Float)

浮点数据类型用于表示浮点整数。浮点数可以表示小数单位或带小数位的数字。浮点型通常用于需要非常好的精度但可能不是很精确的变量。它可以在 4 字节内存中存储精度约为 6 位小数、范围约为 3.4 x 1038 的值。

语法

它具有以下语法:

C 浮点数据类型示例

我们举一个例子来说明 C 语言中的浮点数据类型。

示例

编译并运行

输出

25.144501

d) 双精度浮点型

双精度浮点数据类型用于表示两个浮点整数。当需要额外精度时,例如在科学计算或金融应用程序中,它比浮点型提供更高的精度。

双精度类型使用 8 字节内存,精度约为 15 位小数,产生更大的值。如果未提供显式类型,C 语言默认将浮点数视为双精度浮点数。

语法

它具有以下语法:

C 双精度浮点数据类型示例

我们举一个例子来说明 C 语言中的双精度浮点数据类型。

示例

编译并运行

输出

17.578421

派生数据类型

C 编程还支持派生数据类型,包括数组、指针、结构体和联合体。这些数据类型使程序员能够处理异构数据、直接修改内存和构建复杂的数据结构。

a) 数组

在派生数据类型中,数组允许我们存储相同类型的固定大小元素的序列。它提供了一种将相同数据类型的多个目标连接到同一个名称下的机制。

索引用于访问数组的元素,第一个条目的索引为 0。数组的大小在声明时固定,不能在程序执行期间更改。数组组件放置在相邻的内存区域中。

C 数组示例

我们举一个例子来说明 C 语言中数组的声明和使用。

示例

编译并运行

输出

Values in the array: 10 20 30 40 50

b) 指针

在派生数据类型中,指针用于跟踪数据类型的另一个内存地址。声明指针时,首先声明它所引用的数据类型,然后变量名前加上星号 (*)。

我们可以通过指定变量的内存地址来错误地访问和更改变量的值。 指针通常用于函数指针、数据结构和动态内存分配等任务。

C 指针示例

我们举一个例子来说明 C 语言中指针的声明和使用。

示例

编译并运行

输出

Value of num: 54

c) 结构体

在 C 编程中,结构体是一种派生数据类型,它通过允许将许多数据类型组合在一个名称下,从而创建复合数据类型。它使我们能够通过融合各种类型的变量来创建我们自己的独特数据结构。

  1. 结构体的成员或字段用于引用其中的每个变量。
  2. 任何数据类型,包括不同的结构体,都可以是结构体的成员。
  3. 可以使用点 (.) 运算符访问结构体的成员。

C 结构体示例

我们举一个例子来说明 C 语言中结构体的声明和使用。

示例

编译并运行

输出

Name: John Doe
Age: 30
Height: 1.80

d) 联合体

在 C 编程中,派生数据类型联合体使我们能够将各种数据类型存储在同一个内存地址中。与结构体(每个成员都有单独的内存空间)不同,联合体的成员都共享一个内存空间。在任何给定时刻,联合体的一个成员只能存储一个值。如果我们需要互换地表示多种数据类型,联合体非常有用。与结构体一样,我们可以使用点 (.) 运算符访问联合体的成员。

C 联合体示例

我们举一个例子来说明 C 语言中联合体的声明和初始化。

示例

编译并运行

输出

Integer Value: 42
Float Value: 3.14

枚举数据类型

在 C 编程中,可以使用枚举数据类型 (enum) 定义一组命名常量或枚举器,它们表示一组相关的数值。枚举使我们能够为一组整型值赋予有意义的名称,这使我们的代码更易于阅读和维护。

C 枚举示例

我们举一个例子来说明 C 语言中的枚举数据类型。

示例

编译并运行

输出

Today is 2

空数据类型

在 C 编程中,void 数据类型用于表示缺少特定类型。它经常用于函数返回类型、函数参数和指针这三种情况。

a) 函数返回类型

在 C 语言中,void 返回类型的函数不返回任何值。此函数执行一项任务,然后终止,不向调用函数返回任何值。

示例

b) 函数参数

在 C 编程中,void 参数可用于指定函数不接受任何参数。

示例

c) 指针

在 C 语言中,任何地址都可以存储在 void* 类型的指针中,这使其成为通用指针。它提供了一种处理模糊或非典型类型的指针的方法。

示例

当使用通用指针或希望表示函数不返回值时,void 数据类型有助于定义不接受任何参数的函数。

C Void 示例

我们举一个例子,演示如何在各种情况下使用 void

示例

编译并运行

输出

Hello, world!
Processing input...
Value of number: 10

说明

在这个例子中,我们使用了一个 printHello() 函数,它显示 void 返回类型,这意味着它不返回任何值。之后,我们使用 processInput(void) 函数,它使用 void 作为参数类型,表示它不接受任何参数。main() 函数还说明了一个 void 指针 (void*),它是一种通用指针类型,用于存储任何数据类型的地址。最后,将 void 指针类型转换为 int* 以访问和打印它所指向的值。

结论

总之,数据类型在 C 编程语言中至关重要,因为它们定义了变量可以存储的信息种类。它们提供数据的大小和格式,这使编译器能够分配内存并执行必要的操作。C 支持 void、枚举、派生和基本类型的数据类型。

C 数据类型 MCQ

1) 以下哪个选项显示了 C 语言中 'char' 数据类型的正确大小?

  1. 1 字节
  2. 4 字节
  3. 2 字节
  4. 8 字节
 

答案: a) 1 字节


2) 以下哪个数据类型在 C 编程中具有最大的范围?

  1. 'short'
  2. 'char'
  3. 'int'
  4. 'long'
 

答案: d) 'long'


3) 以下哪个选项不是 C 语言中的标准数据类型?

  1. 'float'
  2. 'number'
  3. 'double'
  4. 'char'
 

答案: b) 'number'


4) 以下哪个选项关于 void 数据类型是正确的?

  1. 'void' 数据类型用于定义指针类型
  2. 'void' 数据类型用于表示字符类型
  3. 'void' 数据类型用于指示可以保存任何数据类型的变量
  4. 'void' 数据类型用于指示不返回任何值的函数
 

答案: d) 'void' 数据类型用于指示不返回任何值的函数。


5) 选择在 C 语言中声明指向整数的指针的正确选项。

  1. 'int* ptr;'
  2. 'int ptr*'
  3. 'pointer int;'
  4. 'ptr int;'
 

答案: a) 'int* ptr;'