C - 数据类型

c中的数据类型是指用于声明不同类型的变量或函数的扩展系统.变量的类型决定了它在存储中占用的空间大小以及存储位模式的解释方式.

C中的类型可分为以下几种;

Sr.No.类型&说明
1

基本类型

它们是算术类型,并进一步分为:(a)整数类型和(b)浮点类型.

2

枚举类型

它们又是算术类型,它们用于定义只能在整个程序中分配某些离散整数值的变量.

3

类型void

类型说明符 void 表示没有值可用.

4

派生类型

它们包括(a)指针类型,(b)数组类型,(c)结构类型,(d)联合类型和(e)函数类型.

数组类型和结构类型统称为聚合类型.函数的类型指定函数返回值的类型.我们将在下一节中看到基本类型,其他类型将在后面的章节中介绍.

整数类型

下表提供标准整数类型的详细信息及其存储大小和值范围 :

Type存储大小值范围
char1字节-128到127或0到255
unsigned char1字节0到255
signed char1个字节-128到127
int2或4字节-32,768至32,767或-2,147,483,648至2,147,483,647
unsigned int2或4字节0到65,535或0到4,294,967,295
2个字节-32,768到32,767
unsigned short2 bytes0到65 ,535
long8字节-9223372036854775808至9223372036854775807
unsigned long8 bytes0到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

浮点类型

下表提供了具有存储大小和值范围及其精度和负值的标准浮点类型的详细信息;

Type存储大小值范围精度
float4字节1.2E-38至3.4E + 38小数点后6位
double8字节2.3E-308到1.7E + 30815位小数
long double10字节3.4E-4932到1.1E + 4932小数点后19位

头文件float.h定义了一些宏,允许您使用这些值以及有关程序中实数的二进制表示的其他详细信息.以下示例打印float类型占用的存储空间及其范围值 :

#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类型

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的指针,该指针可以转换为任何数据类型.