zoukankan      html  css  js  c++  java
  • C语言进阶——结构体,联合,枚举

    ----------------------------------------------------------我是一条划分线----------------------------------------------------------

    ————声明结构的形式————
    *第一种
    struct point{
        int x;
        int y;
        int z;
    };
    struct point p1,p2;//定义两个结构变量

    *第二种
    struct {
        int x;
        int y;
        int z;
    }p1,p2;
    //只定义了p1和p2这两个结构变量

    *第三种 常用
    struct point{
        int x;
        int y;
        int z;
    }p1,p2;
    //同时定义了结构名和结构变量

    ————结构的初始化————
    struct point p1={10,5,6};//依次赋值
    struct point p2={.x=5,.z=6};//没有给y赋值 自动填0

    ————结构成员————
    * 结构的成员可以是不同类型的 数组成员必须是同一类型的
    * 结构利用.运算符和名字访问成员 数组用[]运算符和下表访问成员

    ————结构运算————
    p1=(struct point){5,10}; //相当于 p1.x=5;p2.y=10;
    p1=p2; //相当于p1.x=p2.x;p1.y=p2.y;
    * 数组无法做这两种运算

    ————结构指针————
    * 和数组不同,结构变量的名字并不是结构变量的地址 必须使用&运算符
    * struct date*pDate = &today;

    ————结构作为函数参数————
    int numberofdays(struct date d)
    * 整个结构可以作为参数的值传入函数
    * 这时候在在函数内新建一个结构变量,并复制调用者的结构的值
    * 也可以返回一个结构
    * 和数组完全不同

    ————输入结构————
    * 没有直接的方式可以一次scanf一个结构
    * 当作参数传值的问题 返回的解决方案
    方法①创建一个临时的结构变量,然后把这个结构返回给调用者
    方法②结构指针作为参数(数组不用指针,在子函数中直接就可以操作数组中的值,特别方便)

    struct date{
        int moth;
        int day;
        int year;
    }myday;

    struct date *p = &myday;
    (*p).month = 12;//第一种 稍微麻烦一点
    p->month = 12; //第二种
    ————结构数组————
    * 结构变量的类型可以是数组
    struct date dates[100];
    struct date dates[]={ {1,2,3},{4,5,6} };//最外层大括号
    * 结构变量的类型可以是结构
    strcut dateandtime{
        struct date sdate;
        struct date time;
    };
    //结构中可以有结构,结构数组等,都是可以嵌套的。

    ----------------------------------------------------------我是一条划分线----------------------------------------------------------

    ——————自定义数据类型——————
    * C语言提供了一个 typedef 功能来声明一个已有的数据类型的新名字
    比如 typedef int Length;使Length成为int的别名
    //int a 等价于 Length a
    ———————应用例1————————
    * typedef struct Adate{
        int month;
        int day;
        int year;
    }Date;

    //Date是新名字 不是一个结构体实例, Date等价于 struct Adate
    ———————应用例2————————
    * typedef struct{
        int month;
        int day;
        int year;
    }Date;
    //如果没有typedef 这里就是一个没有名字的结构体struct 他有一个实例叫Date;
    ———————应用例3————————
    typedef char* Strings[10]; //Strings是10个字符串的数组

    ----------------------------------------------------------我是一条划分线----------------------------------------------------------

    ——————联合 union——————
    *存储
        所有的成员共享一个空间
        同一时间只有一个成员是有效的
        union的大小是其最大的成员
    *初始化
        对第一个成员做初始化

    +:
    在内存中的整数是以低位在前原理。
    0x04D2在内存中就是 D2 04 00 00

    ----------------------------------------------------------我是一条划分线----------------------------------------------------------

    * 枚举是一种用户定义的数据类型,通常枚举类型名字不真的使用,要用的是在大括号里的名字,因为它们就是常量符号。
    * 枚举类型只能是int,值从零依次到n;

    * enum 枚举类型名字{名字0,...,名字n}

    例如 enum colors{red,yellow,green};

    创建了三个常量,red的值是0,yellow是1,green是2。

    套路:自动计数的枚举 enum1.png

    * 声明枚举量的时候可以指定值
     * enum COLOR{RED=1,YELLOW,GREEN=5};

    printf("%d",GREEN)   //结果为5
    printf("%d",YELLOW)   //结果为2
    枚举量是 n n+1 n+1+1 n+1+1+1 这样子排列的

    * 给枚举赋不存在的值

    * 人们在用枚举的时候是为了定义符号量,(给符号一个正数值),而不会把它当作枚举类型来使用,因为很(bu)少(hao)用。

  • 相关阅读:
    20161101学习笔记
    20161031学习笔记
    20161028学习笔记
    20161027学习笔记
    ReentrantLock Condition
    ReentrantLock 重入锁
    CountDownLatch用法与原理
    场景化解释 AQS原理
    Atomic
    多线程工具类
  • 原文地址:https://www.cnblogs.com/tqing/p/10869985.html
Copyright © 2011-2022 走看看