• C语言自定义类型(高阶篇三十)


      typedef自定义类型

        格式:

          typedef  新类型名

        如:

          typedef  int  INTEGER;

          typedef  float  REAL;

        定义之后就可以用新的类型定义变量:

          INTEGER  i;

        typedef还有更复杂的用法,比如用它去定义一个数组名,再用这个数组名去定义变量:

          typedef  int  ARR[100];

          ARR  a,b,c;

        这个定义相当于int a[100],b[100],c[100];

        实际上,typedef的定义不像想象中这么简单,下面就归纳下它的定义方法:

          (1)先按定义变量的方法写出定义体(如:int  i)

          (2)将变量名换成新类型名(如:将i换成COUNT)

          (3)在前面加typedef(如:typedef  int  COUNT)

          (4)然后可以用新类型名去定义变量。

        

        再以定义上述的数组类型为例来说明:

          (1)先按定义数组变量形式书写:int n[100];

          (2)将变量名n换成自己指定的类型名:int ARR[100];

          (3)在前面加上typedef,得到typedef int ARR[100];

          (4)用来定义变量ARR a;

        注意:

          ※typedef只能定义各种类型,但它不能定义变量。

        ※C语言没有字符串类型,可以用typedef自己定义一个字符串类型:

          typedef  char  STRING[100];

          STRING Str;

          Str就是个字符串,比使用char  Str[100];来定义字符串要直观的多。

      结构与自定义类型

        第一种:定义结构,同时定义一个结构变量stu,当然也可以同时给它的成员进行初始化。注意这个结构定义时没有结构类型名,因此这个结构只定义了一次变量stu,就再也不起作用了。因为你不知道再用什么方式引用它。

          struct

          {

            ...

          }stu;

        第二种:定义结构时顺便定义一些变量或同类型数组。

          struct student

          {

            ...

          }stu, stuarray[5];

          这种变量定义可分解为:

            struct student stu,stuarray[5];

          省掉中间的花括号,就是它的定义形式。

        同样,使用typedef可以将结构后面定义的变量提升成类型:

          typedef struct student

          {

            char name[9];

            int age;

          }STU,STUARRAY[5];

        参照typedef的定义逻辑,以后用STU  stu就相当于struct student stu;用STUARRAY stuarray就相当于struct student stuarray[5]。

        程序1

          用typedef定义结构类型

    // 30-1用typedef定义结构类型.c。
    
    
    #include <stdio.h>
    
    //自定义结构类型 STU STUARRY
    typedef    struct student
    {
        char name[9];
        int age;
    }STU,STUARRY[3];     //定义了两个类型
    
    
    main()
    {
        STU stu;
        STUARRY stuarry;  //三个元素的组成的结构数组
    
        scanf("%s%d",stu.name,&stu.age);
        printf("姓名:%s 年龄:%d\n\n\n", stu.name, stu.age);
    
    
        scanf("%s%d",stuarry[0].name,&stuarry[0].age);
        scanf("%s%d", stuarry[1].name, &stuarry[1].age);
        scanf("%s%d", stuarry[2].name, &stuarry[2].age);
    
        printf("数组元素0的姓名%s 年龄%d\n",stuarry[0].name,stuarry[0].age);
        printf("数组元素1的姓名%s 年龄%d\n", stuarry[1].name, stuarry[1].age);
        printf("数组元素2的姓名%s 年龄%d\n", stuarry[2].name, stuarry[2].age);
    
    }

      练习

        将“结构与自定义类型”小节定义的STU和STUARRAY两种类型用到实处(比如从5个学生中找出成绩最好的学生)。

    // 30-2用typedef定义结构类型并应用.c
    
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    
    //定义学生结构
    typedef struct student 
    {
        char name[10];
        int age;
        float grade;
    }STU[5];
    
    
    main()
    {
        STU stu;   //定义5个元素的结构数组
        float maxgrade = 0;   //成绩最好的学生中间变量
        int max;   //最好学生的下标
        srand((unsigned)time(NULL));   //随件函数
    
        for (int i = 0; i < 5; i++)
        {
            itoa(i, stu[i].name, 10);  // 将 i 整型转换成字符串类型
            strcat(stu[i].name, "stu"); // 赋值学生名字
            stu[i].age = rand() % 3 +15;  //学生年龄 15 到 17之间
            stu[i].grade = rand()/(double)(RAND_MAX/20)+80;  //学生成绩 80 - 100 分浮点数
        }
    
    
        for (int i = 0; i < 5; i++)
        {
            printf("姓名:%s 年龄:%d 成绩:%.1f\n",stu[i].name,stu[i].age,stu[i].grade);  //输出生成值
    
            if (maxgrade < stu[i].grade)   //作比较
            {
                maxgrade = stu[i].grade; //分数比较
                max = i;    //赋值分数高的同学下标
            }
        }
        printf("\n\n\n成绩最好的学生姓名:%s 年龄:%d 成绩:%.1f\n", stu[max].name, stu[max].age, stu[max].grade);
    }
  • 相关阅读:
    字典转模型之KVC
    Swift的懒加载和只读属性的介绍
    Swift构造函数和便利构造函数
    Swift函数和闭包
    NSURLSession的GET和POST请求的封装
    NSURLSession的GET和POST请求基本使用
    OC语言中NSString操作方法小总结
    mac上git push 报错:error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
    ionic start myApp tabs 报:Error:If you are behind a firewall and need to configure proxy settings, see: https://ion.link/cli-proxy-docs
    git 常用命令
  • 原文地址:https://www.cnblogs.com/httpcc/p/15504618.html
Copyright © 2020-2023  润新知