一、结构体
结构体的格式:
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又有差别,而且后者是没有分号结尾的,注意差别。
五、位运算
关于位运算在先前的介绍中已经提及,而且已经简洁明了,不需要再介绍。