You are on page 1of 6

您现在使用的中文变体可能会影响一些词语繁简转换的效果。建议您根据您的偏好切换到下列变体之一:大陆简

体、香港繁體、澳門繁體、大马简体、新加坡简体、臺灣正體。(不再提示 | 了解更多)
WIKI loves monuments
Photograph a monument,
help Wikipedia and win!
隐藏
北京维基编者将在 10 月 3 日举办线下聚会活动。欢迎报名参加!
[关闭]
数据类型 (C 语言)
维基百科,自由的百科全书
跳到导航
跳到搜索
C 標準函式庫
一般

数据类型
字符类型
字符串
数学
文件输入/输出
日期/时间
本地化
内存分配
过程控制
信号
替代标记

杂项

<assert.h>
<errno.h>
<setjmp.h>
<stdarg.h>

查论编

在 C 语言中,数据类型可以分为两类:基础数据类型和复合数据类型。
目录

1 基础数据类型
2 复合数据类型
2.1 结构
2.2 联合
2.3 枚举
3 参考文献

基础数据类型

注意:以下是典型的数据位长和范围。编译器可能使用不同的数据位长和范围。请参考具体的参考手册。

在标准头文件 limits.h 和 float.h 中说明了基础数据的长度。float,double 和 long double 的范围就


是在 IEEE 754 标准中提及的典型数据。另外,C99 添加了新的复数类型,C11 添加了原子类型,它们不在本条
目讨论范围内。关于这些类型的具体含义和部分细节,参见资料类型,最后一列写出了这些类型在硬件层面的类
型(x86&x86_64 实现)
关键字 位元組(字节) 范围 格式化字符串 硬件层面的类型 备注
char 1bytes 通常为-128 至 127 或 0 至 255,与体系结构相关 %c 字节(Byte) 大多数
情况下即 signed char;

在极少数 1byte != 8bit 或不使用 ASCII 字符集的机器类型上范围可能会更大或更小。其它类型同理。


unsigned char 1bytes 通常为 0 至 255 %c、%hhu 字节
signed char 1bytes 通常为-128 至 127 %c、%hhd、%hhi 字节
int 2bytes(16 位系统) 或
4bytes -32768 至 32767 或
-2147483648 至 2147483647 %i、%d 字(Word)或双字(Double Word) 即 signed int
unsigned int 2bytes 或
4bytes 0 至 65535 或
0 至 4294967295 %u 字或双字
signed int 2bytes 或
4bytes -32768 至 32767 或
-2147483648 至 2147483647 %i、%d 字或双字
short int 2bytes -32768 至 32767 %hi、%hd 字 大多数情况下即 signed short
unsigned short 2bytes 0 至 65535 %hu 字
signed short 2bytes -32768 至 32767 %hi、%hd 字
long int 4bytes 或
8bytes[1] -2147483648 至 2147483647 或
-9223372036854775808 至 9223372036854775807 %li、%ld 长整数(Long Integer)
即 signed long
unsigned long 4bytes 或
8bytes 0 至 4294967295 或
0 至 18446744073709551615 %lu 整数(Unsigned Integer)或

长整数(Unsigned Long Integer)


依赖于实现
signed long 4bytes 或
8bytes -2147483648 至 2147483647 或
-9223372036854775808 至 9223372036854775807 %li、%ld 整数(Signed Integer)或

长整数(Signed Long Integer)


依赖于实现
long long 8bytes -9223372036854775808 至 9223372036854775807 %lli、%lld
长整数(Long Integer)
unsigned long long 8bytes 0 至 18446744073709551615 %llu 长整数
(Unsigned Long Integer)
float 4bytes 2.939x10−38 至 3.403x10+38 (7 sf) %f、%e、%g 浮点数(Float)

double 8bytes 5.563x10−309 至 1.798x10+308 (15 sf) %lf、%e、%g 双精度浮点型


(Double Float)
long double 10bytes 或
16bytes 7.065x10-9865 至 1.415x109864 (18 sf 或 33 sf) %lf、%le、%lg 双精度
浮点型(Double Float) 在大多数平台上的实现与 double 相同,实现由编译器定义。
_Bool 1byte 0 或 1 %i、%d 布尔型(Boolean)

注:粗体为 C99 所新增的类型。


复合数据类型

在 C 语言中,复合数据类型可分为三类:结构、联合和枚举。在现代 C 语言中,联合和枚举的使用频率已逐渐减
少。
结构
主条目:结构体 (C 语言)

结构(structure variable)允许构造由多个基础数据类型组合而成的复杂结构[2]。结构为面向对象编程的
蓝本。以下示例通过结构和结构体里的指针实现了二叉树结构:

typedef struct Bintree {

int data;

struct bintree *lchild; // left child of the node

struct bintree *rchild; // right child of the node

} bintree; // 自定义 bintree 类型

为结构定义变量时通常会用到动态内存分配:

#define mktree() (bintree *)malloc(sizeof(bintree)) // 分配该结构所需的内存单元数量

bintree *tree;

tree = mktree(); // 分配到 tree 指针

tree->data = 1;

tree->lchild = mktree();

...

由于 C 语言不具备自动垃圾收集(Garbage Collection)功能,使用完毕后调用 free(treePtr)来释放之前


通过 malloc(size)分配的内存。详见这里。 在 C99 标准中,还添加了名为伸缩型数组成员的特性[3],关于
此特性的内容超出了该条目的介绍范围,若需了解更多信息可参见文档或其它材料。
联合
主条目:联合体

联合(union)与结构相类似,但不同的是,联合在某一特定时刻只有最后被使用的成员的值是确定的,因此一
个联合只使用所有成员中所占空间最大的成员所使用的内存。然而,一些编译器可以通过编译参数或#pragma 的
方式强制联合使用与所有成员所占储存空间的和相等的储存空间,在这种情况下,除最后被使用的成员外,其余
成员的值是未定义的[4]。以下给出了联合的一个声明:

union foo{

int bar;

double foobar;

};

foo.bar = 8;

foo.foobar = 3.14;

在这个例子中,假设使用 32 位平台编译,一个 double 变量占 8 字节,一个 int 变量占 2 字节(由上表得),则


该联合所占大小即为 double 类型的大小——8 字节。在这段程序执行完毕后,foo.bar 的值是未定义的,而
foo.foobar 的值为 3.14。
枚举

枚举(enumerated type)用来声明一组整数常量。默认情况下,枚举声明格式为 enum type


{value1,value2,...,valuen};此时 value1,value2 分别为 0,1,直到 n-1。事实上,枚举类型在 C 语言
实现中是以 int 类型储存的[5]。以下是枚举的一个声明:

enum a { b , c , d };

在此之后,便可以以如下方式使用:

enum a foo;

foo = b;

if(foo != c) //等同于 if(foo != 1)

do_something();

而此时的 b,c,d 分别为 0,1,2。 另外,也可以手动为枚举列表中的常量赋值。下面是一个例子:

enum colour {red = 100,blue = 700,yellow = 200};

则此时 red,blue,yellow 的值分别为 100,700,200.

需要注意的是,枚举在 C 和 C++中所表现的行为有一些细微的差异。参见 C 与 C++的兼容性。


参考文献

GCC、Clang 等实现中,64 位代码的 long 类型为 64 位,而 MSVC 中则维持 32 位


ISO/IEC 9899:2018 (PDF). [2020-06-10].
ISO/IEC 9899:1999 (PDF). [2020-06-15].
ISO/IEC 9899:2018 (PDF). [2020-06-10].

ISO/IEC 9899:2018 (PDF). [2020-06-10].

[显示]

查论编

C 語言
[显示]

查论编

数据类型
分类:

C 語言 C 標準函式庫数据类型

导航菜单

没有登录
讨论
贡献
创建账户
登录

条目
讨论

不转换

汉漢

阅读
编辑
查看历史

搜索

首页
分类索引
特色内容
新闻动态
最近更改
随机条目
资助维基百科

帮助

帮助
维基社群
方针与指引
互助客栈
知识问答
字词转换
IRC 即时聊天
联络我们
关于维基百科

工具

链入页面
相关更改
上传文件
特殊页面
固定链接
页面信息
引用本页
维基数据项
左侧跳顶连接
短链接

打印/导出

下载为 PDF
打印页面

其他语言

‫العربية‬
Deutsch
English
Français
한국어
Русский
Tiếng Việt

编辑链接

本页面最后修订于 2020 年 8 月 16 日 (星期日) 13:46。


本站的全部文字在知识共享 署名-相同方式共享 3.0 协议之条款下提供,附加条款亦可能应用。(请参阅
使用条款)
Wikipedia®和维基百科标志是维基媒体基金会的注册商标;维基™是维基媒体基金会的商标。
维基媒体基金会是按美国国內稅收法 501(c)(3)登记的非营利慈善机构。

隐私政策
关于维基百科
免责声明
手机版视图
开发者
统计
Cookie 声明

Wikimedia Foundation
Powered by MediaWiki

You might also like