一 概述
二 类型
三 语句
四 函数
五 数据
六 内存
七 代码
附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3. 基本类型
基本类型(整数、浮点数)和枚举类型构成 算术类型 (arithmetic),算术类型和指针类型构成存储单个值的 标量类型 (scalar)。数组和结构类型成为 复合类型 (compound)。
函数类型 描述了函数调用接口,指定参数列表和返回值。其他类型按是否包含存储尺寸,分为 对象类型 (object)和 不完全类型 (incomplete)。
联合(union)在给定时间内只有单个值,不能称做复合类型。
布尔
类型 _Bool 算是整数,0 代表 false,1 为 true。
非零值自动转为为 1。建议包含
stdbool.h
,以熟悉的方式编码。
_Bool x = -100; assert(x == 1);
#include <stdbool.h> bool x = true;
整数
可按是否有符号分类,或以存储大小区分。
相比上面某些类型的不确定性,可用
stdint.h
固定宽度类型,如:int8_t, uint8_t, INT8_MIN
等。另外,char
具体类型由编译器决定。必要环境,严格使用unsigned char
或signed char
更好。
字节,字符
与 Byte 对应的是 unsigned char,还用于存储 ASCII 字符(值,包括扩展)。
注意:字符字面量('A')默认是 int,4 字节。
char c = 'A'; assert(sizeof(c) == 1); assert(sizeof('A') == 4);
char c = 'A'; printf("%c = %d\n", c, c); // A = 65
#include <limits.h> printf("%d\n", CHAR_MIN); // -128
指针
足以存储指针的整数类型。
// stdint.h typedef unsigned long int uintptr_t;
int x = 100; int *p = &x; uintptr_t u = (uintptr_t)p; int *p2 = (int*)u;
字面量
不同进制。
- 二进制:
0b11
。 - 八进制:
011
。 - 十六进制:
0x11
。
给字面量添加后缀表明类型。
0x200 -> int 200U -> unsigned int 0L -> long 0xf0f0UL -> unsigned long 0777LL -> long long 0xFFULL -> unsigned long long
或使用 stdint.h
内定义的宏。
// stdint.h #define UINT64_C(c) c ## UL // ## 拼接左右内容。
#include <stdint.h> UINT64_C(0x123) // 0x123ULL
浮点数
浮点值只能以有限精度存储。
浮点字面量默认为 double 类型,可添加 F、L 后缀表达 float 和 long double 类型。
assert(sizeof(1.0) == 8); assert(sizeof(1.0F) == 4);
复数
添加 _Complex
表⽰复数,在 complex.h
中定义了 complex
宏更统⼀美观。
#include <complex.h> float complex a = 1.0; double complex b = 1.0; long double complex c = 1.0;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论