• c语言学习之基础知识点介绍(十二):结构体的介绍


    一、结构体的介绍

    /*
    语法:
            struct 结构体名{
                成员列表;
            };
        切记切记有分号!
     
        说明:成员列表就是指你要保存哪些类型的数据。
     
        注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型。
    
        因为类型不能保存数据,所以我们要有结构体变量。
    语法:
        struct 结构体名 变量名;
    变量赋值的语法:
                变量名.成员名 = 数据;
            例: zs.age = 16;
          
      输出结构体:
            注意:没有任何格式化控制符能够一次性输出整个结构体
            我们必须一个成员一个成员的输出
     
    
      结构体:可以用来保存多个不同类型的数据
            可以把生活中的一些东西,抽象成结构体
    */
    //这里只是定义了一个结构体类型
    struct person{
        
        float height; //身高
        
        float weight; //体重
        
        int age;  //年龄
        
        char gender;//性别  f代表女 female  m代表男
        
        char name[50]; //姓名
    };
    
    int main(int argc, const char * argv[]) {
        
        struct person zs; //变量名:zs    类型:struct person
        
        zs.age = 16;
        
        zs.gender = 'm';
        
        zs.height = 189;
        
        zs.weight = 60;
        
        //zs.name = "张三";  这是错误的
        strcpy(zs.name, "张三");
        
        printf("姓名:%s  年龄%d  性别:%c  身高%.0f
    ",zs.name,zs.age,zs.gender,zs.height);
        
        return 0;
    }

     

    二、结构体的初始化

    /*
    初始化:
             1、先声明,后赋值
              语法:
                       struct  结构体名 ;
                       变量名.成员名 = 数据; 
              例如:
              struct  UserInfo userInfo;
              userInfo.age = 17;
             
              2、在声明的时候初始化
                    a、语法:struct  结构体名  变量名 = {数据1,数据2,数据N};
                    例如:struct  UserInfo userInfo = {1,17,"张三"};
                    注意:这种方式必须按结构体定义的成员顺序来赋值
    
                     b、语法:struct  结构体名  变量名 = { .成员名1=数据1, .成员名2=数据2, .成员名N=数据N};
                    例如:struct  UserInfo userInfo = {.userId = 1, .age = 17,.userName = "张三"};//一定要按照结构体中变量的顺序来写。
    
                3.先声明,后一次性赋值
     
                struct  结构体名  变量名;
     
                变量名 = (struct 结构体名){ 数据1,数据2,数据N };
     
                 例: struct UserInfo s1;
                          s1 = (struct UserInfo){ 1, 17, "张三"};
    */
    //先定义一个结构体
       struct  UserInfo{
        int userId;//编号
        int age;     //年龄
        char UserName[50];   //用户名
       }
    #include <string.h>
    int main(int argc,const char * argv[]){
          struct  UserInfo userInfo;
          userInfo.age = 17;
          userInfo.userId= 1;     
          strcpy(userInfo.UserName,"张三");
          return 0;
    }
    
    
    
        

    三、结构体的其他使用

    /*
     1.可以定义无限个结构体,用法跟之前说的用法完全一样(只不过是多加了几个类型而已)。
     
     2.作用域:结构体定义在哪,那么它的作用域就在它定义的位置,到它所在的作用域结束。
     
     3.在结构体定义的大括号后面写标识符,那么这个标识符就是这个结构体的变量.它的作用域跟它定义结构体的作用域一样 也可以同时定义多个变量,以 , 隔开。
        例:
             struct Person{
                 int age;
                 char name[50];
             }p3,p4,p5;
    
     4.结构体名可以省略,这样就叫匿名结构体。
        例:
             struct{
                 int age;
                 char name[50];
                 int test;
             }p2;
            p2就是这个匿名结构体类型的变量,可以在大括号后面写多个变量名;
     
     5.结构体变量之间赋值都是值传递,比如说变量a赋值给变量b,b变了后,a不会改变。
     
     6.结构体作为函数的参数是值传递,也就是说函数内改了形参的值,实参不会改变
     
     7.结构体成员里面还可以定义别的结构体变量。
        //结构体里面某个成员又是结构体变量的三种赋值方式
    例如:
        struct Person p1;
        p1.age = 16;
        p1.birthDay.year = 1990;
        p1.birthDay.month = 1;
        p1.birthDay.day = 1;
        struct Person p2 = { 16,"刘德华",{1994,1,1}};
        struct Person p3;
        p3.birthDay = (struct myDate){1994,1,1};
       */
     
    struct myDate{
        
        int year;
        int month;
        int day;
    };
    
    struct Person{
        
        int age;
        char name[50];
        
        //左边是类型   右边是成员名
        struct myDate birthDay;
        
    };
    
    
    struct Student{
        
        int stuNo;
        char name[50];
    };
    
    struct Teacher{
        
        int age;
        int salary;
        char name[50];
    };

    四、typedef的使用

    /*
    typedef:给某个类型起别名。
    语法:typedef   类型   别名 ;
    例如:
     typedef  int  i;
     i num =10;
     printf("%d 
    ",num);
    */
    
    typedef struct{
        int age;
        char name[50];
    }Person; //类型
    
    struct{
        int age;
        char name[50];
    }p; //这个p是变量
    
    //当前面加了typedef大括号后面的标识符才是类型,否则都是变量
  • 相关阅读:
    SQL server 2008 建立新用户
    2021.3.22-刷题 (移位)
    2021.3.17刷题-分割回文串
    2021.3.16 刷题--组合总和||(一种组合下元素不可重复选取)
    2021.3.15刷题-组合总和(元素可重复选取)
    2021.3.14刷题-设计哈希映射
    2021.3.13刷题-用拉链法设计哈希集合
    2021.3.12刷题-验证二叉树的前序序列化
    2021.3.11刷题-(删除二叉搜索树中的节点)
    2021.2.28刷题 回溯-电话字母组合
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/4933019.html
Copyright © 2020-2023  润新知