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>头文件,定义了bool、true、false等符号,以便更方便地使用布尔类型。
这个表提供了一个更详细的概览,涵盖了 C 语言支持的各种数据类型及其修饰符。不同的数据类型和修饰符可以组合使用,以适应不同的编程需求和场景。
复数浮点型
复数浮点型在 C 语言中是通过库来支持的,而不是直接作为语言的基本数据类型。C99 标准引入了对复数的支持,通过在<complex.h>头文件中定义了一系列宏和函数来处理复数。
使用复数类型,首先需要包含<complex.h>头文件。在这个头文件中,复数类型被定义为:
float _Complexdouble _Complexlong double _Complex
此外,C99 还引入了一个宏来创建复数值,即CMPLX、CMPLXF和CMPLXL,分别用于double _Complex、float _Complex和long double _Complex类型的复数。
创建和使用复数
例如,创建一个double _Complex类型的复数可以这样做:
#include <complex.h>
double _Complex z = 1.0 + 2.0 * I;这里I是一个表示虚单位的宏。
对复数的操作,如加、减、乘、除以及获取其实部和虚部等,可以使用<complex.h>中定义的一系列函数来完成:
creal()和cimag()分别用于获取复数的实部和虚部。cabs()用于计算复数的绝对值(模)。carg()用于计算复数的幅角(主值)。conj()用于计算复数的共轭。
示例
计算两个复数之和,并打印结果的实部和虚部:
#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;
}这段代码首先创建了两个复数z1和z2,然后计算它们的和。creal(sum)和cimag(sum)分别用来获取结果复数的实部和虚部,最后将它们打印出来。
复数浮点型提供了一种强大的方式来在 C 语言中处理复数运算,对于需要进行复杂数学运算的程序来说非常有用。
