九、结构体、共用体与枚举 十、位运算

 

 

一、结构体

结构体的格式:

struct 类型名

{

成员列表;

}

变量名列表;

 

也可以直接定义一个结构体变量:

struct

{

成员列表;

}

变量名列表;

 

 

下面用一个程序将结构体的使用演示:

#include<stdio.h>

#include<string.h>

 

struct student  //定义结构体

{

         char name[20];

         struct      //内嵌结构体,不用类名,所以说用的是变量形式的结构体

         {

                   int year;

                   int month;

                   int day;

         }birthday;

         char sex;

};

 

int main()

{

         struct student data[2];  //定义结构体变量

         struct student *p=data;   //定义结构体指针

 

         strcpy(p->name,"tan");  //初始化,为数据直观,不用用户输入的方式

         p->birthday.year=1990;

         p->birthday.month=12;

         p->birthday.day=29;

         p->sex='B';

 

         strcpy((p+1)->name,"zhu");

         (p+1)->birthday.year=1990;

         (p+1)->birthday.month=10;

         (p+1)->birthday.day=25;

         (p+1)->sex='G';

 

 

//这里有用箭头和用点的问题,一条原则,只要是指针就用箭头,其他就用点来表示成员

         printf("the first person is:%s %d %d %d %c\n",p->name,p->birthday.year,p->birthday.month,p->birthday.day,p->sex);

         printf("the second person is:%s %d %d %d %c\n",(p+1)->name,(p+1)->birthday.year,(p+1)->birthday.month,(p+1)->birthday.day,(p+1)->sex);

         return 0;

}

 

 

上面用的结构体,内嵌结构体,还有结构体类和结构体变量,结构体的定义初始化到处理使用、输出,进行了大概的操作。至于链表和顺序表这一块知识点,这里不做展开,在数据结构中会有详细的说明。

 

 

 

 

二、共用体

首先进行说明,为节约内存或便于对数据进行处理,C语言允许在一个储存单元中(先后)存放不同类型的数据,或者在该储存单元中以某种类型存放数据,而以另外类型访问该数据,这种储存单元的特殊数据类型称为共用体类型,也叫做联合类型。

共用体用的是同一个内存,因此某个时刻只能保持某一个成员的数据,当一个成员的数据发生改变时,其他成员的数据也发生了变化,部分或全部被覆盖。表面上和结构体用法差不多,但是这个差别却说出了实质上的东西。下面一个简单的程序的输出就可以验证以上观点:

#include<stdio.h>

 

 

union data

{

         int a;

         char b;

};

 

int main()

{

         union data temp;

         temp.a=1111;

         temp.b='r';

         printf("%d\n",temp.a);

         printf("%d\n",temp.b);

         return 0;

}

 

 

 

三、枚举

结构:

enum 类型名 {标识符序列};

例如:

enum color{red,yellow,blue,white,black};

枚举值标识符自动赋值给他们0,1,2,3,4,5

假如

enum color{red=3,yellow,blue,white,black};

那么yellow就是4,自动顺延。

 

 

以下程序用于举例具体的使用:(比较简单,不写注释)

#include<stdio.h>

 

 

 

int main()

{

 

         enum day{mon=1,tue,wed,thu,fri,sat,sun}x;

         scanf("%d",&x);

         switch(x)

         {

         case mon:

         case tue:

         case wed:

         case thu:

         case fri:printf("work day!\n");break;

         case sat:

         case sun:printf("rest day!\n");break;

         default:printf("error!\n");

         }

         return 0;

}

 

 

四、用户自定义

用户自定义结构体为例,相当于这么理解,是自定义的结构体,格式如下:

typedef struct

{

……

}student;

 

 

Student a,b,c;

 

 

这么一看就知道是什么意思了,typedef A B;相当于是把A部分用B自定义的B部分来代替,typedef int asdl;的话,asd就有等同int的功能,可以定义整型,就是这个意思,这个和宏定义#define又有差别,而且后者是没有分号结尾的,注意差别。

 

 

五、位运算

关于位运算在先前的介绍中已经提及,而且已经简洁明了,不需要再介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值