zoukankan      html  css  js  c++  java
  • C语言知识框架总结

    一、数据类型

    1、基本数据类型

    整形

    short(signed、unsigned)

    示例:

    short a;

    short int a;

    int(signed、unsigned)

    示例:

    int a;

    long(signed、unsigned)

    示例:

    short a;

    long int a;

    浮点型

    float

    示例:

    float a;

    double(long)

    示例:

    long double a;

    字符

    char(signed、unsigned)

    示例:

    char a;

    字符串(字符指针char*/字符数组char []/字符常量)

    示例:

    char* a=NULL;(指针最好初始化)

    char a[];

    "abcdef"(字符常量)

    2、聚合数据类型

    数组

    一维数组(a[2])

    数组名是一个指向第一个元素地址的指针常量

    定义:在一段地址连续的内存空间储存相同数据类型的集合

    访问元素:下标访问[],a[1]访问a中索引为1的元素

    示例:

    int a[2] = {1,2};//初始化一个整形数组

    多维数组

    数组名是指向第一行向量地址的指针常量

    定义:int a[][];

    下标运算:最右边[]里先变化

    可以看出特殊的一维数组,只是数组中的元素也是数组,例如二维数组可以看成一维数组,其中元素也是一个一维数组

    int a[2][2] = {{1,2},{3,4}};//在内存中是按照1,2,3,4存储的

    指针数组(其中元素是指针)

    char* a[];//将char*看成int一样的数据类型,只是数组元素不是int型而是字符指针类型

    指针

     int* a;int i; int b[];

    定义:存储地址的变量 

    初始化:需要用&给指针赋值,  a = &i;a=b;

    间接访问(*): 访问存储地址上的对象

    指针与数组:

    *与[]:*(a+1)==a[1]==b[1];

    ++: a++ a的地址加一

    逻辑运算:指向同一数组的指针可以比较大小(任何指针都可以比较相等不相等)

    混淆点:谁在最后就是谁,指针数组就是数组,元素是指针。int* 看做一个整体,相当于int,都是数据类型

    指针数组:int * p[];数组元素类型是指针

    数组指针:int (*p)[];指向数组的指针

    指针函数(返回类型是指针的函数):int* f();返回指向整形的指针,f是一个函数

    函数指针(指向函数的指针):int (*f)(); f是指向函数的指针 该函数返回整形

    指针与地址:指针存放地址

    NULL指针:不指向任何地址的指针

    注意:.(成员运算符)、->、()、[]优先级最高

    结构体(struct)

    定义:不同类型数据的集合

    struct a {成员表列} 变量表列;

    a是标签

    成员表列:类型说明符 成员名;

    此时编译器不会给a分配内存空间,只有声明变量才会给变量分配地址

    3种定义结构体类型变量的方法

    1、先声明结构体类型再定义变量名

    struct stu{};

    struct stu stu1;

    2、声明结构体类型的同时定义变量

    struct stu{}stu1;

    3、直接定义结构体变量

    struct {} stu1;

    初始化:struct a a1={x=1,x=2};

    结构数组:元素类型是结构的数组

    struct a a2[];

    结构指针:指向结构类型的指针

    struct a * a3;

    结构成员访问:

    a1.x;

    a3->x;(*a3).x

    结构体自引用:

    struct SELF_REF2{

                                int a;

                                struct SELF_REF2 *b;

                                int c;

    };

    结构体变量的引用

     结构体变量不能整体输入输出,要使用结构体成员运算符访问成员

    printf("%s%c%d",stu1);

    stu1.name;

    可以整体赋值

    stu2 = stu1;

    只能对最低级成员进行赋值及运算

    stu1.birth.moth;

    可以引用结构体变量以及其成员的地址

    结构指针变量做函数参数

    1、结构体变量成员

    2、结构体变量

    3、结构体指针

    联合(union)

    定义:同一地址内存上不同时刻存放不同数据

    union a {成员表列} 变量表列;

    a:标签

    成员表列:int a; float b;

    变量表列:

    a1,a2

    初始化:

    union {

    int a;

    float b;

    char a[4];

    } x={5};

    成员访问:x.a;

    枚举(enum)

    定义

    enum 枚举名{枚举元素1,枚举元素2,...};

    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    };

     注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

    可以在定义枚举类型时改变枚举元素的值:

    enum season {spring, summer=3, autumn, winter};

     没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5

    枚举变量的定义

    前面我们只是声明了枚举类型,接下来我们看看如何定义枚举变量。

    我们可以通过以下三种方式来定义枚举变量

    1、先定义枚举类型,再定义枚举变量

    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    };
    enum DAY day;

    2、定义枚举类型的同时定义枚举变量

    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;

    3、省略枚举名称,直接定义枚举变量

    enum
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;

    示例

    #include 
     
    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    };
     
    int main()
    {
        enum DAY day;
        day = WED;
        printf("%d",day);
        return 0;
    }

    结果

    3

    在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。

    不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。

    以下实例使用 for 来遍历枚举的元素:

    #include 
     
    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;
    int main()
    {
        // 遍历枚举元素
        for (day = MON; day <= SUN; day++) {
            printf("枚举元素:%d 
    ", day);
        }
    }

    结果

    枚举元素:1 
    枚举元素:2 
    枚举元素:3 
    枚举元素:4 
    枚举元素:5 
    枚举元素:6 
    枚举元素:7

    以下枚举类型不连续,这种枚举无法遍历。

    enum
    {
        ENUM_0,
        ENUM_10 = 10,
        ENUM_11
    };

    枚举在 switch 中的使用:

    #include 
    #include 
    int main()
    {
     
        enum color { red=1, green, blue };
     
        enum  color favorite_color;
     
        /* 用户输入数字来选择颜色 */
        printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
        scanf("%u", &favorite_color);
     
        /* 输出结果 */
        switch (favorite_color)
        {
        case red:
            printf("你喜欢的颜色是红色");
            break;
        case green:
            printf("你喜欢的颜色是绿色");
            break;
        case blue:
            printf("你喜欢的颜色是蓝色");
            break;
        default:
            printf("你没有选择你喜欢的颜色");
        }
     
        return 0;
    }

    结果

    请输入你喜欢的颜色: (1. red, 2. green, 3. blue): 1
    你喜欢的颜色是红色

    将整数转换为枚举

    以下实例将整数转换为枚举:

    #include 
    #include 
     
    int main()
    {
     
        enum day
        {
            saturday,
            sunday,
            monday,
            tuesday,
            wednesday,
            thursday,
            friday
        } workday;
     
        int a = 1;
        enum day weekend;
        weekend = ( enum day ) a;  //类型转换
        //weekend = a; //错误
        printf("weekend:%d",weekend);
        return 0;
    }

    结果

    weekend:1

    二、控制流

    1、顺序

    语句程序块

    例:

    int i=1;

    int a[3];

    2、条件

    if-else

    switch

    3、循环

    while

    do{}while

    for()

    三、函数

    1、声明 函数原型

    void printd();

    2、定义

    返回值类型 函数名 (参数列表)

    {

            函数体

    }

    3、递归

    直接间接调用自己,要有停止条件

    四、动态存储分配

    数组的长度是预定义好的,在整个程序中固定不变。C语言不允许动态数组类型

    1、常用的内存管理函数有以下三个

    分配内存空间函数 malloc、calloc

    释放内存空间函数 free

    2、malloc

    函数原型:void* malloc(unsigned int size);

    其作用是在内存的动态存储区中分配一个长度为size的连续空间(size是一个无符号数),此函数的返回值是一个指向分配域起始地址的指针(void)

    若此函数未能成功地执行(内存不足),返回空指针(NULL);

    int * p = (int*)malloc(200*sizeof(int));

    3、calloc

    函数原型

    void* calloc(unsigned n,unsigned size);

    其作用是在内存的动态存储区中分配n个长度为size的连续空间(size是一个无符号数),此函数的返回值是一个指向分配域起始地址的指针(void)

    若此函数未能成功地执行(内存不足),返回空指针(NULL);用calloc函数可以为一维数组开辟存储空间,n是数组元素个数,每个元素长度为size;

    int * p = (int*)malloc(200,sizeof(int));

    4、free

    函数原型

    void free(void* p);

    其作用是释放由p指向的内存区,使这个部分内存区能被其他变量使用。p是最近一次调用calloc或malloc函数时返回的值。

    free(p);

    五、头文件

    访问方式

    #include <头文件>

     1、输入输出:

    定义输入输出函数、类型以及宏的数目占整个标准库的三分之一

    流:是与磁盘或其他外围设备关联的数据的源或目的的。文本流、二进制流

    打开一个流就是将把该流与一个文件或设备连接起来,关闭流将断开这种连接。

    1.1文件操作

    FILE *fopen(const char* filename, const char *mode);

    fopen打开filename指定的文件,并返回一个与之相关联的流。若打开失败返回NULL。

    mode:

    "r":打开文本文件用于读

    "w":创建文本文件用于写,并删除已存在的内容

    "a":追加;打开或创建文本文件,并向文件末尾追加内容

    "r+":打开文本文件用于更新(读和写)

    "w+":创建文本文件用于更新,并删除已存在的内容

    "a+":追加;打开或创建文本文件用于更新,写文件时追加到文件末尾

    在上述访问模式之后加入b,如"rb"或"w+b"等,则表示对二进制文件进行操作。

    FILE *freopen(const char* filename, const char *mode,FILE *stream);

    freopen以mode打开filename指定的文件,并将该文件关联到stream指定的流。返回stream;若打开失败返回NULL。freopen函数一般用于改变与stdin、stdout、stderr相关联的文件。

    int fflush(FILE *stream);

    对输出流来说,fflush将已写到缓冲区但尚未写入文件的所有数据写到文件中。对输入流来说,其结果未定义。发生错误,返回EOF,否则返回0。

    fflush(NULL)将清洗所有的输出流。

    int fclose(FILE *stream);

    将所有未写入的数据写入stream中,丢弃缓冲区中的所有未读输入数据,并释放自动分配的全部缓冲区,最后关闭流。若出错则返回EOF,否则返回0。

    int remove(const char *filename);

    删除filename指定的文件。失败返回非0值。

    int rename(const char* oldname, const char *newname);

    修改文件的名字。失败返回非0值。

    FILE *tmpfile(void);

    以模式"wb+"创建一个临时文件,该文件在被关闭或程序正常结束时将被自动删除。若创建成功,返回一个流,失败返回NULL。

    1.2格式化输出

    printf函数提供格式化输出转换。

    int fprintf(FILE *stream, const char *format,...);

    按照format说明的格式对输出进行转换,并写到stream流中。返回值是实际写入的字符数。若出错返回一个负值。

    格式串由普通字符(将被复制到输出流中)与转换说明(分别决定下一后续参数的转换和打印,以%开头,以转换字符结束[%d])

    在%与转换字符之间可以依次包括下列内容:

    标志,用于修改转换说明

             -:指定被转换的参数在其字段内左对齐

             +:指定在输出的数前面加上正负号

             空格:如果第一个字符不是正负号,则在其前面加上一个空格

             0:对于数值转换,当输出长度小于字段宽度时,添加前导0进行填充

             #:指定另一种输出形式。如果为o转换,则第一个数字为零;如果为x或X转换,则指定在输出值的非0值前加0x或0X;对于e、E、f、g或G转换,指定输出总包括一个小数点;           对于g或者G转换,指定输出值尾部无意义的0将被保留。

    一个数值,用于指定最小字段宽度。

    点号,用于分割字段宽度和精度

    表示精度的数。

    int printf(const char *format,...);

    printf(...)等价于fprintf(stdout,...)

    int sprintf(char * s, const char *format,...);

    sprintf函数与printf函数基本相同,但其输出将被写入字符串s中,并以‘’结尾。

    1.3格式化输入

    int fscanf(FILE *stream, const char* format,...);

    根据格式串format从流stream中读取输入,并把转换后的值赋值给后续各个参数,其中每个参数必须为指针。

    int scanf(const char* format,...);

    scanf(...)等价于fscanf(stdin,...)

    int sscanf(const char *s,const char *format);

    sscanf(s,...)函数与scanf(...)等价,不同的是,前者的输入字符来源于字符串s

    1.4字符输入输出函数

    int fgetc(FILE *stream);

    返回stream中下一个字符。若到达文件末尾或发生错误,则返回EOF

    char *fgets(char *s, int n, FILE *stream);

    最多将下n-1个字符读入数组s中。若到达文件末尾或发生错误,则返回NULL。

    int fputc(int c, FILE *stream);

    把字符c(转换为unsigned char类型)输出到stream。返回写入的字符,若发生错误,则返回EOF

    int fputs(const char *s, FILE *stream);

    字符串s(不含' ')输出到stream。返回非负值,若发生错误,则返回EOF。

    int getc(FILE *stream);

    等价于fgetc,不同的是,当getc函数定义为宏时,他可能多次计算stream的值。

    int getchar(void);

    等价于getc(stdin)

    char* gets(char *s);

    把下一个输入行读入数组s中,并把末尾的换行符替换成字符'',返回字符串s,若到达文件末尾或发生错误,则返回NULL。

    int putc(int c,FILE *stream);

    等价于fputc,不同的是,当putc函数定义为宏时,他可能多次计算stream的值。

    int putchar(int c);

    putchar(c)==putc(c,stdout);

    int puts(const char *s);

    把字符串s和一个换行符输出到stdout中。发生错误返回EOF,否则返回非负值。

    int ungetc(int c, FILE *stream)

    把c写回到流stream中,下次对该流进行读操作时,将返回该字符。

    1.5直接输入输出函数

    size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream);

    从流stream中读取最多nobj个长度为size的对象,并保存到ptr指向的数组中。返回读取的对象数。

    size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream);

    从ptr指向的数组中读取nobj个长度为size的对象,并输出到流stream中。

    1.6文件定位函数

    int fseek(FILE *stream, long offset, int origin);

    设置流stream的文件位置,后续的读写操作将从新位置开始。

    long ftell(FILE *stream);

    返回stream流的当前文件位置。

    2、字符类别测试:

    C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。

    这些函数接受 int 作为参数,它的值必须是 EOF 或表示为一个无符号字符。

    如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。

    1 int isalnum(int c)
    该函数检查所传的字符是否是字母和数字。
    2 int isalpha(int c)
    该函数检查所传的字符是否是字母。
    3 int iscntrl(int c)
    该函数检查所传的字符是否是控制字符。
    4 int isdigit(int c)
    该函数检查所传的字符是否是十进制数字。
    5 int isgraph(int c)
    该函数检查所传的字符是否有图形表示法。
    6 int islower(int c)
    该函数检查所传的字符是否是小写字母。
    7 int isprint(int c)
    该函数检查所传的字符是否是可打印的。
    8 int ispunct(int c)
    该函数检查所传的字符是否是标点符号字符。
    9 int isspace(int c)
    该函数检查所传的字符是否是空白字符。
    10 int isupper(int c)
    该函数检查所传的字符是否是大写字母。
    11 int isxdigit(int c)
    该函数检查所传的字符是否是十六进制数字。

    标准库还包含了两个转换函数,它们接受并返回一个 "int"

    1 int tolower(int c)
    该函数把大写字母转换为小写字母。
    2 int toupper(int c)
    该函数把小写字母转换为大写字母。

    3、字符串函数<string.h>

    string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

    定义了两组字符串函数,一组函数的名字以str开头,一组以mem开头

    NULL
    这个宏是一个空指针常量的值。

    size_t
    这是无符号整数类型,它是 sizeof 关键字的结果

    1 void *memchr(const void *str, int c, size_t n)
    在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
    2 int memcmp(const void *str1, const void *str2, size_t n)
    把 str1 和 str2 的前 n 个字节进行比较。
    3 void *memcpy(void *dest, const void *src, size_t n)
    从 src 复制 n 个字符到 dest
    4 void *memmove(void *dest, const void *src, size_t n)
    另一个用于从 src 复制 n 个字符到 dest 的函数。
    5 void *memset(void *str, int c, size_t n)
    复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
    6 char *strcat(char *dest, const char *src)
    把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
    7 char *strncat(char *dest, const char *src, size_t n)
    把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
    8 char *strchr(const char *str, int c)
    在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
    9 int strcmp(const char *str1, const char *str2)
    把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
    10 int strncmp(const char *str1, const char *str2, size_t n)
    把 str1 和 str2 进行比较,最多比较前 n 个字节。
    11 int strcoll(const char *str1, const char *str2)
    把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。
    12 char *strcpy(char *dest, const char *src)
    把 src 所指向的字符串复制到 dest
    13 char *strncpy(char *dest, const char *src, size_t n)
    把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
    14 size_t strcspn(const char *str1, const char *str2)
    检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
    15 char *strerror(int errnum)
    从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。
    16 size_t strlen(const char *str)
    计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
    17 char *strpbrk(const char *str1, const char *str2)
    检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
    18 char *strrchr(const char *str, int c)
    在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
    19 size_t strspn(const char *str1, const char *str2)
    检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
    20 char *strstr(const char *haystack, const char *needle)
    在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
    21 char *strtok(char *str, const char *delim)
    分解字符串 str 为一组字符串,delim 为分隔符。
    22 size_t strxfrm(char *dest, const char *src, size_t n)
    根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。

    4、数学函数:<math.h>

    math.h 头文件定义了各种数学函数和一个宏。在这个库中所有可用的功能都带有一个 double 类型的参数,且都返回 double 类型的结果。

    1 double acos(double x)
    返回以弧度表示的 x 的反余弦。
    2 double asin(double x)
    返回以弧度表示的 x 的反正弦。
    3 double atan(double x)
    返回以弧度表示的 x 的反正切。
    4 double atan2(double y, double x)
    返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。
    5 double cos(double x)
    返回弧度角 x 的余弦。
    6 double cosh(double x)
    返回 x 的双曲余弦。
    7 double sin(double x)
    返回弧度角 x 的正弦。
    8 double sinh(double x)
    返回 x 的双曲正弦。
    9 double tanh(double x)
    返回 x 的双曲正切。
    10 double exp(double x)
    返回 e 的 x 次幂的值。
    11 double frexp(double x, int *exponent)
    把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。
    12 double ldexp(double x, int exponent)
    返回 x 乘以 2 的 exponent 次幂。
    13 double log(double x)
    返回 x 的自然对数(基数为 e 的对数)。
    14 double log10(double x)
    返回 x 的常用对数(基数为 10 的对数)。
    15 double modf(double x, double *integer)
    返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。
    16 double pow(double x, double y)
    返回 x 的 y 次幂。
    17 double sqrt(double x)
    返回 x 的平方根。
    18 double ceil(double x)
    返回大于或等于 x 的最小的整数值。
    19 double fabs(double x)
    返回 x 的绝对值。
    20 double floor(double x)
    返回小于或等于 x 的最大的整数值。
    21 double fmod(double x, double y)
    返回 x 除以 y 的余数。

    5、实用函数:<stdlib.h>

    stdlib .h 头文件定义了四个变量类型、一些宏和各种通用工具函数。

    执行数值转换、内存分配以及其他类似工作的函数。

    1 double atof(const char *str)
    把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
    2 int atoi(const char *str)
    把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
    3 long int atol(const char *str)
    把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
    4 double strtod(const char *str, char **endptr)
    把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
    5 long int strtol(const char *str, char **endptr, int base)
    把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
    6 unsigned long int strtoul(const char *str, char **endptr, int base)
    把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。
    7 void *calloc(size_t nitems, size_t size)
    分配所需的内存空间,并返回一个指向它的指针。
    8 void free(void *ptr)
    释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
    9 void *malloc(size_t size)
    分配所需的内存空间,并返回一个指向它的指针。
    10 void *realloc(void *ptr, size_t size)
    尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
    11 void abort(void)
    使一个异常程序终止。
    12 int atexit(void (*func)(void))
    当程序正常终止时,调用指定的函数 func
    13 void exit(int status)
    使程序正常终止。
    14 char *getenv(const char *name)
    搜索 name 所指向的环境字符串,并返回相关的值给字符串。
    15 int system(const char *string)
    由 string 指定的命令传给要被命令处理器执行的主机环境。
    16 void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
    执行二分查找。
    17 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
    数组排序。
    18 int abs(int x)
    返回 x 的绝对值。
    19 div_t div(int numer, int denom)
    分子除以分母。
    20 long int labs(long int x)
    返回 x 的绝对值。
    21 ldiv_t ldiv(long int numer, long int denom)
    分子除以分母。
    22 int rand(void)
    返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
    23 void srand(unsigned int seed)
    该函数播种由函数 rand 使用的随机数发生器。
    24 int mblen(const char *str, size_t n)
    返回参数 str 所指向的多字节字符的长度。
    25 size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
    把参数 str 所指向的多字节字符的字符串转换为参数 pwcs 所指向的数组。
    26 int mbtowc(whcar_t *pwc, const char *str, size_t n)
    检查参数 str 所指向的多字节字符。
    27 size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
    把数组 pwcs 中存储的编码转换为多字节字符,并把它们存储在字符串 str 中。
    28 int wctomb(char *str, wchar_t wchar)
    检查对应于参数 wchar 所给出的多字节字符的编码。

    6、日期与时间函数:<time.h>

    time.h 头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数

    库变量

    1 size_t
    是无符号整数类型,它是 sizeof 关键字的结果。
    2 clock_t
    这是一个适合存储处理器时间的类型。
    3 time_t is
    这是一个适合存储日历时间类型。
    4 struct tm
    这是一个用来保存时间和日期的结构。

    tm 结构的定义如下:

    struct tm {
       int tm_sec;         /* 秒,范围从 0 到 59        */
       int tm_min;         /* 分,范围从 0 到 59        */
       int tm_hour;        /* 小时,范围从 0 到 23        */
       int tm_mday;        /* 一月中的第几天,范围从 1 到 31    */
       int tm_mon;         /* 月,范围从 0 到 11        */
       int tm_year;        /* 自 1900 年起的年数        */
       int tm_wday;        /* 一周中的第几天,范围从 0 到 6    */
       int tm_yday;        /* 一年中的第几天,范围从 0 到 365    */
       int tm_isdst;       /* 夏令时                */
    };

    库函数

    1 char *asctime(const struct tm *timeptr)
    返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。
    2 clock_t clock(void)
    返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。
    3 char *ctime(const time_t *timer)
    返回一个表示当地时间的字符串,当地时间是基于参数 timer。
    4 double difftime(time_t time1, time_t time2)
    返回 time1 和 time2 之间相差的秒数 (time1-time2)。
    5 struct tm *gmtime(const time_t *timer)
    timer 的值被分解为 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
    6 struct tm *localtime(const time_t *timer)
    timer 的值被分解为 tm 结构,并用本地时区表示。
    7 time_t mktime(struct tm *timeptr)
    把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。
    8 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
    根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。
    9 time_t time(time_t *timer)
    计算当前日历时间,并把它编码成 time_t 格式。
  • 相关阅读:
    哈希表
    跳表
    哈夫曼之谜
    选择树、判定树和查找树

    将gbk字符串转换成utf-8,存储到注册表中后,再次从注册表读取转换成gbk,有问题!!!
    函数内部还是不要使用 strtok()
    没想到: System.out.println(n1 == f1 ? n1 : f1);
    在不同DPI屏幕环境下,让图标显示的尺寸保持不变,使用 LoadImage() 加载图标
    在多线程中显示模态窗口,出现异常现象
  • 原文地址:https://www.cnblogs.com/qqw-1995/p/15054918.html
Copyright © 2011-2022 走看看