返回介绍

3. 基本类型

发布于 2024-10-12 21:58:08 字数 2300 浏览 0 评论 0 收藏 0

基本类型(整数、浮点数)和枚举类型构成 算术类型 (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 charsigned 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文