zoukankan      html  css  js  c++  java
  • C-结构体、枚举

    #include <stdio.h>
    
    //结构体:可以由多个不同类型的数据构成
    int main()
    {
        struct Person
        {   //里面的3个变量,可以称为是结构体的成员或者属性
            int age;
            double height;
            char *name;
        };
        
        struct Person p = {201.55"jack"};//根据结构体类型,定义结构体变量,,,,且只能在定义结构体变量的同时对成员进行依次赋值。
        p.age = 30;
        p.name = "rose";
        
        return 0;
    }
    #include <stdio.h>
    
    int main()
    {   //1.定义结构体类型(并不会分配存储空间)
        struct Date
        {
            int year;
            int month;
            int day;
        };
        
        //2.定义结构体变量(真正分配存储空间)
        struct Date d1 = {2011, 4, 10};
        struct Date d2 = {2011, 8, 9};
        //会将d1 所有成员的值对应地赋值给d2的所有成员
        d2 = d1;
        
        return 0;
    }

    从小到大,从上往下

    #include <stdio.h>
    int main()
    {
        struct Student
        {
            int age;
            char *name;
        }
        
        struct Student stu;
        stu.age = 20;
        stu.name = "jack";
        
        int s = sizeof(stu);
        printf("%d
    ", s);
        
        return 0;
    }
    //输出为:16
    //补齐算法, 结构体所占内存空间,一定为最大成员所占存储空间的倍数,

    变量的多种定义方式:

      

    #include <stdio.h>
    int main()
    {   /*方式一:
         //1.类型
         struct Student
         {
         int age;
         double height;
         char *name;
         };
         //2.变量
         struct Student stu = {20, 1.78, "jack"};
         */
        //方式二
        struct Student
        {
            int age;
            double height;
            char *name;
        } stu;//等同于方式一      //包括两个部分 1,定义结构体类型  2,利用新定义好的类型来定义结构体变量      //即定义类型的同时定义变量
        struct Student stu2;//再次使用S他人的n天
        //方式三
        struct {
            int age;
            char *name;
        } stu;//缺点:不能重用
        
        return 0;
    }

    总结: 定义结构体变量的3种方式

        1,先定义类型再定义变量

            struct Student   {  int age;  };  

            struct Student stu;

        2, 定义类型的同时定义变量

            struct Student  {  int age;  } stu;  struct Student stu2;

        3, 定义类型的同时定义变量(省略类型名称)

            struct  {  int age;  } stu;

    //指向结构体的指针
    int main()
    {
        struct Student
        {
            int no;
            int age;
        };
        
        struct Student stu = {1, 20};
        
        struct Student *p;//指针变量p将来指向struct Student类型的数据
        p = &stu;//指针变量p指向了stu变量
        
        
        //第一种
        printf("age= %d, no=%d
    ", stu.age, stu.no);
    
        //第二种
        printf("age= %d, no=%d
    ", (*p).age, (*p).no);//访问stu的存储空间里的no
        
        //第三种
        printf("age=%d, no=%d
    ", p->age, p->no);
    }

    总结:

    1, struct Student *p;

    2, 利用指针访问结构体成员

     1》 (*P).成员名称

     2》 p->成员名称 

            

    //结构体的嵌套
    int main()
    {
        struct Date
        {
            int year;
            int month;
            int day;
        }
        
        struct Student
        {
            int no;
            //int year;
            //int month;
            //int day;
            
            struct Date birthday;
            struct Date ruxueDate;
        }
        struct Student stu = {1, {2000, 9, 10}, {2012, 9, 12}};
        return 0
    }

    枚举

     

    //枚举
    int main()
    {
        //定义枚举类型
        enum Season
        {
            spring,//0 也可以自定义为1
            summer,//1
            autumn,//2
            winter//3
        };
        //2,定义枚举变量
        enum Season s = summer
        return 0;
    }

    数据类型总结----------------------------------

    基本数据类型

    int

      long int 、 long  8 %ld

      short int 、 short  2 %d %i

      unsigned int、 unsigned  4 %zd

      signed int、 signed、 int  4 %d %i

    float/double

      floar 4 %f

      double 8 %f

    char 1 %c %d

    char类型保存在内存中的是它的ASCII值

    二构造类型

    1,数组

      只能由同一种类型的数据组成、

    2,结构体

      可以由不同类型的数据组成

    三、指针类型

      间接操作变量的值

      

  • 相关阅读:
    js中属性点.和中括号[]的关系。
    jQuery中的$(window).load()与$(document).ready()以及jquery $(document).ready() 与window.onload的区别
    今天中了一个脚本病毒。把我的所有 html 加了 vbs 脚本,WriteData 是什么鬼?
    原生js 当前时间 倒计时代码
    一看就懂得移动端rem布局、rem如何换算
    使用CSS实现三栏自适应布局(两边宽度固定,中间自适应)
    js运算符的一些特殊应用
    中文目录对 sublime text 有什么影响?
    Spring的注解@Qualifier小结
    伪共享(False Sharing)
  • 原文地址:https://www.cnblogs.com/IDRI/p/4928482.html
Copyright © 2011-2022 走看看