Skip to content

2.8 c 语言中的数据类型

为了提供一个更全面的视角,下面是 C 语言中数据类型的一个详细列表,包括基本类型、派生类型以及它们的一些变种或特殊形式。

基本类型

  • 整型
    • int:整数
    • short int:短整数
    • long int:长整数
    • unsigned int:无符号整数
    • unsigned short int:无符号短整数
    • unsigned long int:无符号长整数
    • signed char:有符号字符
    • unsigned char:无符号字符
  • 浮点型
    • float:单精度浮点数
    • double:双精度浮点数
    • long double:扩展精度浮点数
  • 字符型
    • char:字符

枚举类型

  • enum:枚举

派生类型

  • 数组(array)
  • 结构体(struct)
  • 联合体(union)
  • 指针(pointer)
  • 函数:返回类型和参数类型可以是上述任何类型

特殊类型

  • 空类型(void):用于指定没有值的情况,如无返回值的函数的返回类型或无类型指针(void*)。

限定符

  • const:指定变量的值不可修改
  • volatile:告诉编译器,变量的值可能以程序未明确指定的方式被改变
  • register:建议编译器尽可能地将变量存储在寄存器中
  • static:影响变量的存储期和链接性

类型修饰符

用于修改基本类型,使之适应特定的场合,如long, short, signed, unsigned等。

布尔类型

在 C99 标准中引入了_Bool作为布尔类型。C 标准库还提供了<stdbool.h>头文件,定义了booltruefalse等符号,以便更方便地使用布尔类型。

这个表提供了一个更详细的概览,涵盖了 C 语言支持的各种数据类型及其修饰符。不同的数据类型和修饰符可以组合使用,以适应不同的编程需求和场景。


复数浮点型

复数浮点型在 C 语言中是通过库来支持的,而不是直接作为语言的基本数据类型。C99 标准引入了对复数的支持,通过在<complex.h>头文件中定义了一系列宏和函数来处理复数。

使用复数类型,首先需要包含<complex.h>头文件。在这个头文件中,复数类型被定义为:

  • float _Complex
  • double _Complex
  • long double _Complex

此外,C99 还引入了一个宏来创建复数值,即CMPLXCMPLXFCMPLXL,分别用于double _Complexfloat _Complexlong double _Complex类型的复数。

创建和使用复数

例如,创建一个double _Complex类型的复数可以这样做:

c
#include <complex.h>

double _Complex z = 1.0 + 2.0 * I;

这里I是一个表示虚单位的宏。

对复数的操作,如加、减、乘、除以及获取其实部和虚部等,可以使用<complex.h>中定义的一系列函数来完成:

  • creal()cimag()分别用于获取复数的实部和虚部。
  • cabs()用于计算复数的绝对值(模)。
  • carg()用于计算复数的幅角(主值)。
  • conj()用于计算复数的共轭。

示例

计算两个复数之和,并打印结果的实部和虚部:

c
#include <stdio.h>
#include <complex.h>

int main() {
    double _Complex z1 = 1.0 + 2.0 * I;
    double _Complex z2 = 3.0 + 4.0 * I;
    double _Complex sum = z1 + z2;

    printf("Sum: %.1f + %.1fi\n", creal(sum), cimag(sum));

    return 0;
}

这段代码首先创建了两个复数z1z2,然后计算它们的和。creal(sum)cimag(sum)分别用来获取结果复数的实部和虚部,最后将它们打印出来。

复数浮点型提供了一种强大的方式来在 C 语言中处理复数运算,对于需要进行复杂数学运算的程序来说非常有用。