zoukankan      html  css  js  c++  java
  • C语言学习:结构体(笔记)

    1、结构体类型的定义和变量的定义

    • 结构体是一种构造数据类型
      (构造数据类型:数组类型、结构体类型(struct)、共用体类型(union))

    用途:把不同类型的数据组合成一个整体,类似Java中的类,但不同的是,C语言的构造体中木有函数(即Java中的方法)———自定义数据类型
    1.1 定义一个结构体类型的一般形式

    struct [结构体名]//struct是关键字,
    不能省略;结构体名为合法标识符。
    {
        类型标识符  成员名;//成员类型可以是基本型或构造型
        类型标识符  成员名;
        ············
    };//注意不要忘记这里的 ;
    

    1.2 定义结构体类型变量的3种方法
    1.2.1 先定义结构体类型,再定义变量名

    struct student
            { 
             int num;
             char  name[20];
             char sex;
             int age;
             float score;
             char addr[30];
            }; 
            struct student   stu1,stu2;     

    1.2.2 定义结构体类型同时定义结构体类型变量:

    struct student
            { 
             int num;
             char  name[20];
             char sex;
             int age;
             float score;
             char addr[30];
            }stu1,stu2;    

    1.2.3 直接定义结构体类型变量:

    struct 
            { 
             int num;
             char  name[20];
             char sex;
             int age;
             float score;
             char addr[30];
            }stu1,stu2;    

    说明:
    结构体类型与结构体变量概念不同
    类型:不分配内存; 变量:分配内存
    类型:不能赋值、存取、运算; 变量:可以
    结构体可嵌套
    结构体成员名与程序 中变量名可相同,不 会混淆
    例:

    例 struct  date
        {    int month;
              int day;
              int year;
        };
       struct  student
      {   int  num;
           char name[20];
           struct  date  birthday;
      }stu;

    1.3 结构体变量的初始化
    一般格式
    结构体类型 结构体变量名={初始值表 };

    方法一:

    struct student
    { char name[10];
       int age;
       float score[5],ave;
    }stu={“zhangsan”,20,78,92,83,75,69};

    方法二:

    2struct student
    { char name[10];
       int age;
       float score[5],ave;
    };
    struct student 
    stu={“zhangsan”,20,78,92,83,75,69};

    1.4 结构体变量的引用
    1.4.1对结构体类型数据的整体引用
    赋值运算
    ANSI C允许两个相同结构的结构体变量直接赋值
    例:

    struct student li,zhang={"zhangsan",20,78,92,83,75,69}; 
          li=zhang; //将zhang对象拷贝一份赋值给li
          /*
          但li={ “li si”,19,76,56,90,69,80};是非法的
       */

    1.4.2 求结构体类型数据的字节数

    sizeof(变量名或类型名);

    1.4.3 结构体类型数据成员的引用
    引用规则:结构体变量出同类型赋值外,不能整体引用,只能引用变量成员
    引用方式: 结构体变量名.成员变量

    stu.name = "dashan";

    1.4.4 嵌套结构体中成员的引用
    结构体嵌套时,逐级引用

    struct  student
      {
           int  num;
           char name[20];
           struct  date 
          {    int month;
                int day;
                int year;
          }birthday;
      }stu1,stu2;
    
    //给出生日期的年份赋值
    stu1.birthday.year = 1999;
    

    2、结构体数组
    2.1 结构体数组的定义及初始化
    2.1.1结构体数组的定义,与定义结构体类型变量很类似,也有三种形式
    形式一:

    struct  student
          {     int  num;
                 char name[20];
                 char sex;
                 int age;
          };
    struct  student stu[2];

    形式二:

    struct  student
          {     int  num;
                 char name[20];
                 char sex;
                 int age;
          }stu[2];

    形式三:

      struct 
          {     int  num;
                 char name[20];
                 char sex;
                 int age;
          }stu[2];

    2.1.2 结构体数组的引用
    结构体数组元素的引用

     struct  student
          {     int  num;
                 char name[20];
                 char sex;
                 int age;
          }str[3]={{10,”zhang san”,’,M’,20}};
    
     str[1]=str[0];

    结构体数组元素成员的引用
    引用方式: 结构体数组名[下标].成员名

     struct  student
          {     int  num;
                 char name[20];
                 char sex;
                 int age;
          }str[3];
    
    stu[1].age++;
    strcpy(stu[0].name,”ZhaoDa”);

    3、结构体和指针
    3.1 结构体指针变量的定义
    定义形式:struct 结构体名 *结构体指针名;

    struct  student  *p;
    //此时指针变量*p中存放的是--结构体变量在内存的起始地址
    
    //例:
    struct  student
          {     int  num;
                 char name[20];
                 char sex;
                 int age;
          }stu;
    struct  student   *p=&stu;

    3.2 结构体指针变量的引用
    使用结构体指针变量引用成员形式

    (*结构体指针变量名).成员名 <=> 结构体指针变量名->成员名 <=> 结构体变量名.成员名

    例:

    int n;
    int *p = &n;
    *p = 10; <=> n = 10;
    struct student
        {      
        long int num;
         char name[20];
         char sex;
         float score;
        }stu1;
    struct student *p = &stu1;
    stu1.num=101;   <=>  (*p).num=101;  <=> p->num=101;
  • 相关阅读:
    rc-local.service服务启动失败,导致rc.local中的开机启动服务不能启动
    bacula快速部署
    配置github SSH公钥登录
    快速安装zabbix
    编译安装git
    linux系统日志中出现大量systemd Starting Session ### of user root 解决
    根据屏幕高度自适应元素高度
    git+github上传与管理
    ajax简单应用
    自己常用的webstrom快捷键
  • 原文地址:https://www.cnblogs.com/MountDa/p/13174763.html
Copyright © 2011-2022 走看看