C - 数据类型
c 中的数据类型是指用于声明不同类型的变量或函数的广泛系统。变量的类型决定了它在存储中占用多少空间以及如何解释存储的位模式。
C 中的类型可以分类如下 -
先生。 | 类型和描述 |
---|---|
1 | 基本类型 它们是算术类型,并进一步分为:(a)整数类型和(b)浮点类型。 |
2 | 枚举类型 它们又是算术类型,用于定义在整个程序中只能分配某些离散整数值的变量。 |
3 | 类型无效 类型说明符void表示没有可用值。 |
4 | 派生类型 它们包括 (a) 指针类型、(b) 数组类型、(c) 结构类型、(d) 联合类型和 (e) 函数类型。 |
数组类型和结构类型统称为聚合类型。函数的类型指定函数的返回值的类型。我们将在下一节中看到基本类型,其他类型将在接下来的章节中介绍。
整数类型
下表提供了标准整数类型及其存储大小和值范围的详细信息 -
类型 | 存储大小 | 取值范围 |
---|---|---|
字符 | 1字节 | -128 至 127 或 0 至 255 |
无符号字符 | 1字节 | 0 至 255 |
签名字符 | 1字节 | -128 至 127 |
整数 | 2 或 4 字节 | -32,768 至 32,767 或 -2,147,483,648 至 2,147,483,647 |
无符号整数 | 2 或 4 字节 | 0 至 65,535 或 0 至 4,294,967,295 |
短的 | 2字节 | -32,768 至 32,767 |
无符号短 | 2字节 | 0 至 65,535 |
长的 | 8 字节或(32 位操作系统为 4 字节) | -9223372036854775808 至 9223372036854775807 |
无符号长 | 8字节 | 0 至 18446744073709551615 |
要获取特定平台上类型或变量的确切大小,可以使用sizeof运算符。表达式sizeof(type)生成对象或类型的存储大小(以字节为单位)。下面给出了一个示例,使用limits.h头文件中定义的不同常量来获取机器上各种类型的大小 -
#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> int main(int argc, char** argv) { printf("CHAR_BIT : %d\n", CHAR_BIT); printf("CHAR_MAX : %d\n", CHAR_MAX); printf("CHAR_MIN : %d\n", CHAR_MIN); printf("INT_MAX : %d\n", INT_MAX); printf("INT_MIN : %d\n", INT_MIN); printf("LONG_MAX : %ld\n", (long) LONG_MAX); printf("LONG_MIN : %ld\n", (long) LONG_MIN); printf("SCHAR_MAX : %d\n", SCHAR_MAX); printf("SCHAR_MIN : %d\n", SCHAR_MIN); printf("SHRT_MAX : %d\n", SHRT_MAX); printf("SHRT_MIN : %d\n", SHRT_MIN); printf("UCHAR_MAX : %d\n", UCHAR_MAX); printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX); printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX); printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX); return 0; }
当您编译并执行上述程序时,它会在 Linux 上产生以下结果 -
CHAR_BIT : 8 CHAR_MAX : 127 CHAR_MIN : -128 INT_MAX : 2147483647 INT_MIN : -2147483648 LONG_MAX : 9223372036854775807 LONG_MIN : -9223372036854775808 SCHAR_MAX : 127 SCHAR_MIN : -128 SHRT_MAX : 32767 SHRT_MIN : -32768 UCHAR_MAX : 255 UINT_MAX : 4294967295 ULONG_MAX : 18446744073709551615 USHRT_MAX : 65535
浮点类型
下表提供了标准浮点类型的详细信息,包括存储大小、值范围及其精度 -
类型 | 存储大小 | 取值范围 | 精确 |
---|---|---|---|
漂浮 | 4字节 | 1.2E-38 至 3.4E+38 | 小数点后 6 位 |
双倍的 | 8字节 | 2.3E-308至1.7E+308 | 小数点后 15 位 |
长双 | 10字节 | 3.4E-4932 至 1.1E+4932 | 小数点后 19 位 |
头文件 float.h 定义了宏,允许您在程序中使用这些值以及有关实数二进制表示形式的其他详细信息。以下示例打印浮点类型及其范围值占用的存储空间 -
#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> int main(int argc, char** argv) { printf("Storage size for float : %d \n", sizeof(float)); printf("FLT_MAX : %g\n", (float) FLT_MAX); printf("FLT_MIN : %g\n", (float) FLT_MIN); printf("-FLT_MAX : %g\n", (float) -FLT_MAX); printf("-FLT_MIN : %g\n", (float) -FLT_MIN); printf("DBL_MAX : %g\n", (double) DBL_MAX); printf("DBL_MIN : %g\n", (double) DBL_MIN); printf("-DBL_MAX : %g\n", (double) -DBL_MAX); printf("Precision value: %d\n", FLT_DIG ); return 0; }
当您编译并执行上述程序时,它会在 Linux 上产生以下结果 -
Storage size for float : 4 FLT_MAX : 3.40282e+38 FLT_MIN : 1.17549e-38 -FLT_MAX : -3.40282e+38 -FLT_MIN : -1.17549e-38 DBL_MAX : 1.79769e+308 DBL_MIN : 2.22507e-308 -DBL_MAX : -1.79769e+308 Precision value: 6
虚空类型
void 类型指定没有可用值。它用于三种情况 -
先生。 | 类型和描述 |
---|---|
1 | 函数返回 void C 中有多种函数不返回任何值,或者您可以说它们返回 void。无返回值的函数的返回类型为 void。例如,void exit(int status); |
2 | 函数参数为 void C 中有多种不接受任何参数的函数。没有参数的函数可以接受 void。例如,int rand(void); |
3 | 指向 void 的指针 void * 类型的指针表示对象的地址,但不表示其类型。例如,内存分配函数void *malloc( size_t size ); 返回一个指向 void 的指针,该指针可以转换为任何数据类型。 |