c中的数据类型是指用于声明不同类型的变量或函数的扩展系统.变量的类型决定了它在存储中占用的空间大小以及存储位模式的解释方式.
C中的类型可分为以下几种;
Sr.No. | 类型&说明 |
---|---|
1 | 基本类型 它们是算术类型,并进一步分为:(a)整数类型和(b)浮点类型. |
2 | 枚举类型 它们又是算术类型,它们用于定义只能在整个程序中分配某些离散整数值的变量. |
3 | 类型void 类型说明符 void 表示没有值可用. |
4 | 派生类型 它们包括(a)指针类型,(b)数组类型,(c)结构类型,(d)联合类型和(e)函数类型. |
数组类型和结构类型统称为聚合类型.函数的类型指定函数返回值的类型.我们将在下一节中看到基本类型,其他类型将在后面的章节中介绍.
整数类型
下表提供标准整数类型的详细信息及其存储大小和值范围 :
Type | 存储大小 | 值范围 |
---|---|---|
char | 1字节 | -128到127或0到255 |
unsigned char | 1字节 | 0到255 |
signed char | 1个字节 | -128到127 |
int | 2或4字节 | -32,768至32,767或-2,147,483,648至2,147,483,647 |
unsigned int | 2或4字节 | 0到65,535或0到4,294,967,295 |
短 | 2个字节 | -32,768到32,767 |
unsigned short | 2 bytes | 0到65 ,535 |
long | 8字节 | -9223372036854775808至9223372036854775807 |
unsigned long | 8 bytes | 0到18446744073709551615 |
获取类型或变量的确切大小在特定平台上,您可以使用 sizeof 运算符.表达式 sizeof(type)产生对象或类型的存储大小(以字节为单位).下面给出了一个示例,使用limits.h头文件中定义的不同常量来获取机器上各种类型的大小 :
#include#include #include #include 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
浮点类型
下表提供了具有存储大小和值范围及其精度和负值的标准浮点类型的详细信息;
Type | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4字节 | 1.2E-38至3.4E + 38 | 小数点后6位 |
double | 8字节 | 2.3E-308到1.7E + 308 | 15位小数 |
long double | 10字节 | 3.4E-4932到1.1E + 4932 | 小数点后19位 |
头文件float.h定义了一些宏,允许您使用这些值以及有关程序中实数的二进制表示的其他详细信息.以下示例打印float类型占用的存储空间及其范围值 :
#include#include #include #include 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+38FLT_MIN : 1.17549e-38-FLT_MAX : -3.40282e+38-FLT_MIN : -1.17549e-38DBL_MAX : 1.79769e+308DBL_MIN : 2.22507e-308-DBL_MAX : -1.79769e+308Precision value: 6
void类型
void类型指定没有可用值.它用于三种情况 :
Sr.No. | 类型&说明 |
---|---|
1 | 函数返回为void C中有各种函数,它们不返回任何值,或者可以说它们返回void.没有返回值的函数的返回类型为void.例如, void exit(int status); |
2 | 函数参数为void C中有各种函数不接受任何参数.没有参数的函数可以接受void.例如, int rand(void); |
3 | 无效指针 void *类型的指针代表地址一个对象,但不是它的类型.例如,内存分配函数 void * malloc(size_t size); 返回一个指向void的指针,该指针可以转换为任何数据类型. |