zoukankan      html  css  js  c++  java
  • C语言学习笔记--枚举&结构体

    • 枚举

    枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明:

      enum 枚举类型名字 {名字0,名字1,。。。,名字n};

    枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为它们就是常量符号,它们的类型是int,值则依次从0到n。

      如:enum color{red,yellow,green};

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

    当需要一些可以排列起来的常量值时,定义枚举的意思就是给这些常量值名称。

    枚举量可以作为值;

    枚举类型可以加上enum作为类型;但实际是以整数来计算和输入输出的。

    #include<stdio.h>
    enum color{ red, yellow, green,Numcolors};//此处Numcolors为小套路,数值刚好等于定义的枚举量,可以定义数组,遍历数组等使用。
    void f(enum color c);//此处enum必须带上
    int main(void)
    {
            enum color t = red;//枚举类型可以加上enum作为类型
            scanf("%d",&t);
            f(t);
    
            return 0;
    }
    
    void f(enum color c)
    {
            printf("%d
    %,c);
    }

    枚举量

    声明枚举量的时候可以指定值,如

      

    enum COLOR {RED = 1, YELLOW,GREEN = 5};//RED = 1是从1开始的,不是从0
                                                                             //YELLOW =2
                                                                            //GREEN = 5

    枚举只是int,即使给枚举类型的变量赋不存在的值,也没有任何warning和error。

    虽然枚举类型可以当做类型用,但是很少用。

    如果有意义上排比的名字,用枚举比用const int方便。

    枚举比宏好,因为枚举有int类型。

    •  结构
    #include<stdio.h>
    int main(int grc,char *grv[])
    {
            struct date {
            int month;
            int day;
            int year;
            };
            struct date today;
            today.month = 07;
            today.day = 31;
            today.year = 2014;
    
            printf("Today's date is %i-%i-%i
    ",today.month,today.day,today.year);
    
            return 0;
    }

    和本地变量一样:在函数内部声明的结构变量只能在函数内部使用;在函数外声明的结构变量可以在所有函数使用。

    所以通常在函数外部声明结构变量,这样可以在多个函数使用。

     结构变量的初始化

    struct date day = {07,31,2014};//第一种初始化方法
    struct Thismonth = {.month = 07,.year = 2014};//第二种初始化方法。未指定为0

    结构变量的成员

    结构和数组有点像

    数组用【】运算符和下标访问其成员

    结构用 .运算符和名字访问其成员

      today.day

    要访问整个结构,直接用结构变量的名字

    对于整个结构,可以赋值,取地址,也可以传递给函数参数

    p1 = (struct point){5,10};  ----> p1.x = 5; p2.y = 10;

    p1 = p2;  ---->相当于p1.x = p2.x; p1.y = p2.y

  • 相关阅读:
    windwos8.1英文版安装SQL2008 R2中断停止的解决方案
    indwows8.1 英文版64位安装数据库时出现The ENU localization is not supported by this SQL Server media
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    SQL数据附加问题
    eclipse,myeclipse中集合svn的方法
    JAVA SSH 框架介绍
    SSH框架-相关知识点
    SuperMapRealSpace Heading Tilt Roll的理解
    SuperMap iserver manage不能访问本地目的(IE9)
    Myeclipse中js文件中的乱码处理
  • 原文地址:https://www.cnblogs.com/netcn/p/4364094.html
Copyright © 2011-2022 走看看