c语言学习:枚举和结构体

常量符号化:

  • 用符号而不是具体的数字来表示程序中的数字
  • const int a=12;             const使a固定为12的值

枚举:

  • 枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明:
  • enum 枚举类型名字{名字0,.....,名字n};
  • 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,它们的类型固定为int值依次从0到n,如名字0的值即为0,名字1的值即为1,名字n的值即为n。
  • 当需要一些可以排列起来的常量值时,定义枚举的意义就是给了这些常量值名字。

  • 枚举量可以作为值
  • 枚举类型可以跟上enum作为类型
  • 实际上等于int类型,做整数运算以及输入输出
  • #include<stdio.h>
    
    enum color{red,yellow,green};
    //定义新的数据类型 叫做color,可当作类似int的数据类型来用 
    void f(enum color c);
    
    int main(void)
    {
    	enum color t=red;
    //enum clor为定义数据类型,当作int使用	
    	scanf("%d",&t);
    	f(t);
    	
    	return 0;
    }
    
    void f(enum color c)
    {
    	printf("%d\n",c);
    }
  • NumCOLORS作为自动计数
  • #include<stdio.h>
    
    enum COLOR {RED,YELLOW,GREEN,NumCOLORS
    };
    //NumCOLORS作为计数前面的颜色总数 
    int main(int argc,char const *argv[])
    {
    	int color=-1;
    	char *ColorNames[NumCOLORS]={
    	"red","yellow","green",};
    	
    	char *colorName=NULL;
    //定义指针	
    	printf("输入你喜欢的颜色的代码:");
    	scanf("%d",&color);
    	if(color>=0&&color<NumCOLORS){
    		colorName=ColorNames[color];
    	}else{
    		colorName="unknown";
    	}
    	printf("你喜欢的颜色是%s\n",colorName);
    }
    

枚举量:

  • 声明枚举量的时候可以指定值
  • enum COLOR[RED=1,YELLOW,GREEN=5};
  • 那么YELLOW便是RED+1=2,而YELLOW和GREEN之间的3和4便被舍弃

  • 虽然枚举类型可以当作类型使用,但是实际上不好用
  • 如果有意义上排比的名字,用枚举比const int方便
  • 枚举比宏(macro)好,因为枚举有int类型

结构类型:

  • 结构体:struct 名称 {int 成员名字,int 成员名字}
  • stuct 名称  变量;       即为该变量里有成员的数据
  • 输出用%i
  • struct date{
    	int month;
    	int day;
    	int year;
    };
    //每一个struct date定义的变量里都有month,day,year 
    struct date today;
    
    today.month=07;
    today.day=31;
    today.year=2014;

声明结构的形式:

  • p1何p2都是point,里面都有x和y的值
    struct point{
    	int x;
    	int y;
    };
    
    struct point p1,p2;
    

  • p1和p2都是一种无名结构,里面有x和y,通常用在临时使用结构

    struct{
    	int x;
    	int y;
    }p1,p2;

  • p1和p2都是point,里面有x和y的值

    struct point{
    	int x;
    	int y;
    }p1,p2;

结构初始化的方式:

struct date today;
today.month=07;
today.day=31;
today.year=2014;

struct date today={07,31,2014};

struct date today={.month=7,.year=2014};
//因为day没有初始化,所以自动初始化为0 

struct date today;
today=(struct date){07,31,2014};

结构成员:

  • 结构和数组有点像
  • 数组用[ ]运算符和下标访问其成员
  • a[10]=10;
  • 结构用 . 运算符和名字访问其成员
  • today.day    student.firstName    p1.x     p1.y

结构运算:

  • 要访问整个结构,直接用结构变量的名字
  • 对于整个结构 ,可以做赋值、取地址,也可以传递给函数参数
  • p1=(struct point){5,10};      相当于p1.x=5;p1.y=10;
  • p1=p2;         相当于p1.x=p2.x;   p1.y=p2.y

结构指针:

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

结构体数组:

结构体中也有数组,称为结构体数组。它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项。

定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。或者说同前面介绍的普通数组的定义是一模一样的,如:

  1. struct STUDENT stu[10];

这就定义了一个结构体数组,共有 10 个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。

结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用 for 循 环一个一个地使用结构体数组中的元素。

 结构输入变量的函数:

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值