C语言 数据类型

  • 数据类型

    C中的数据类型是指用于声明不同类型的变量或函数的扩展系统。变量的类型决定了它在存储中占据多少空间以及如何解释所存储的位模式。
    C中的类型可以分类如下-
    类型 描述
    基本类型 它们是算术类型,并且进一步分为:(a)整数类型和(b)浮点类型。
    枚举类型 它们还是算术类型,用于定义只能在整个程序中分配某些离散整数值的变量。
    类型void 类型说明符void指示没有可用值。
    派生类型 它们包括(a)指针类型,(b)数组类型,(c)结构体类型,(d)联合类型 (e)函数类型。
    数组类型和结构类型统称为集合类型。函数的类型指定函数的返回值的类型。我们将在下一节中看到基本类型,其他类型将在以后的章节中介绍。
  • 整数类型

    下表提供了标准整数类型的详细信息及其存储大小和值范围-
    类型 容量 取值范围
    char 1 byte -128 to 127 or 0 to 255
    unsigned char 1 byte 0 to 255
    signed char 1 byte -128 to 127
    int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647
    unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295
    short 2 bytes -32,768 to 32,767
    unsigned short 2 bytes 0 to 65,535
    long 8 bytes -9223372036854775808 to 9223372036854775807
    unsigned long 8 bytes 0 to 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
    
  • 浮点类型

    下表提供了标准浮点类型的详细信息以及存储大小和值范围及其精度-
    类型 容量 取值范围 精确
    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定义了宏,这些宏使您可以使用这些值以及有关程序中实数二进制表示形式的其他详细信息。以下示例显示浮点类型占用的存储空间及其范围值-
    
    #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类型指定没有可用值。它在三种情况下使用-
    类型 说明
    函数返回为空 C中有各种函数不返回任何值,或者可以说它们返回void。没有返回值的函数的返回类型为void。例如,void exit(int status;
    函数参数为void C中有各种函数,它们不接受任何参数。没有参数的函数可以接受空白。例如,int rand(void;
    void指针 类型为void *的指针表示对象的地址,但不表示其类型。例如,一个内存分配函数void * malloc(size_t size); 返回指向void的指针,该指针可以转换为任何数据类型。